2010-12-07 70 views
2

我正在尝试使用基于UITableView中所选行填充的UIPickerView来设置UI。从本质上讲,它与您在开始&“结束”屏幕中看到的用于在日历应用中添加事件的UI相同。可能取消UIPickerView动量动画?

http://raoli.com/files/uipicker.png

我有这样它的选择器系统会根据选择填充和正确地更新我的模型......大部分时间我的数据源和委托的设置。

我得到的一个问题是,当有人轻弹选取器视图,然后在表视图中更改选定内容时,UIPickerViewDelegate会尝试记录表视图中新选择的更改,而不是原始选择。很明显,在我的代码中,为什么会发生这种情况,并且我有一些想法来重新修改我的行为,但我想我会看到苹果在他们的UI中做了什么。

当您在选取器完成旋转之前轻弹选取器并切换时间时,立即停止旋转,选取器将更新为新类型时间的值,并且原始类型的时间保持不变。我没有办法取消动画,但我可能是错的。我希望我错了,因为这会让我的生活更轻松。

我可以看到的另一种替代方法是针对每个属性使用不同的UIPickerViews并将它们切换出来。所以,显然,苹果的例子会有2个UIPickerView实例。这只是创造了其他需要完成的工作,我想我会看到是否有办法用最少数量的视图来完成。

更新阿龙的想法表现出一定的承诺,但它看起来像有一个关于消息是如何被传递到委托基础上,选取器的状态下,选择器主要是是否正在动画数量的边缘情况。由于似乎无法确定拾取器是否正在旋转(至少通过公共API),试图解决可能的配置似乎有问题。我最终选择了多个选择器,当所选属性更改时切换选择器的可见性,并忽略来自现在隐藏的UIPickerView实例的委托消息。

回答

3

我觉得

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated 

将是一个不错的人选。如果animatedNO它应该立即显示你想要的而不移动。

当您决定设置数据时,请在选取器视图上调用该方法以反映该设置。我希望它会覆盖任何当前的动画或惯性效果,并希望在代表中不会收到didSelectRow:。如果你这样做,可能有必要忽略它。

+0

不错的想法,没有想到它,但不幸的是似乎并没有把蝙蝠做好。看起来像`pickerView:didSelectRow:inComponent:`实际上是从微调器获取值,而不是将传入的值作为`row`。所以,即使我传入0,我的UIPickerDelegate也会像13那样调用`didSelectRow:`委托方法时的值。 但是,你已经产生了一个可能通过子类修复这个问题的想法。谢谢! – Jablair 2010-12-07 23:26:04