【发布时间】:2010-12-07 22:35:47
【问题描述】:
我正在尝试使用基于 UITableView 中选定行填充的 UIPickerView 设置 UI。本质上,它与您在“开始和结束”屏幕中看到的用于在日历应用程序中添加事件的 UI 相同。
http://raoli.com/files/uipicker.png
我已经获得了我的数据源和委托的设置,因此选择器会根据选择进行填充并正确更新我的模型......大部分时间。
我遇到的一个问题是,当有人轻弹选择器视图然后更改表视图中的选择时,UIPickerViewDelegate 尝试根据表视图中的新选择记录更改,而不是原始选择。很明显,在我的代码中为什么会发生这种情况,我有一些想法可以修改我的行为以更好地表现,但我想我会看到 Apple 在他们的 UI 中做了什么。
当您在选择器旋转完成前轻拂选择器并切换时间,旋转立即停止,选择器更新为新时间类型的值,而原始时间类型保持不变。我没有看到任何取消动画的方法,但我可能是错的。我希望我是错的,因为它会让我的生活更轻松。
我可以看到的另一种选择是每个属性都有不同的 UIPickerViews 并将它们切换出来。因此,很明显,Apple 示例将有 2 个 UIPickerView 实例。这只是创建了其他需要完成的工作,我想我会看看是否有一种方法可以用最少的视图来完成。
更新 Aaron 的想法显示了一些希望,但看起来有许多关于如何根据选择器的状态将消息传递给代理的边缘案例,主要是选择器是否目前正在制作动画。由于似乎无法确定选择器当前是否正在旋转(至少通过公共 API),因此尝试解决可能的配置似乎是有问题的。我最终选择了多个选择器,当所选属性更改时切换选择器的可见性,并忽略来自现在隐藏的 UIPickerView 实例的委托消息。
【问题讨论】:
标签: iphone objective-c cocoa-touch uipickerview