(我的问题是 WKInterfacePicker
,但标准 UIPickerView
的想法也可能适用。)
我想知道是否有人对如何限制 WKInterfacePicker
上可选值的范围有任何建议?
解释一下:假设我有两个选择器,A 和 B。每个选择器都有一个唯一的值数组。如果用户向上或向下移动选取器 A,我会通过相同的索引变化使选取器 B 向相反方向移动。问题是选择器 A 的移动是否会超出 B 的值数组( <0
或 >array.count
)。我需要将选择器 A 上的可选值范围保持在选择器 B 的限制内,即使 A 在其自己的数组中可能具有更高或更低的索引值。
我尝试创建选择器 A 值的“切片”以匹配选择器 B 限制的范围,但这会改变选择器 A 上的索引编号(即索引 x 不再属于相同的值)。
我理想地寻找一种方法来阻止用户选择选择器 A 超过给定的索引范围。任何想法/想法都非常受欢迎。提前致谢!
最佳答案
没有收到答案,但我想我会发布我是如何解决这个问题的,以防其他人遇到这个问题。
首先,当前形式的 wkinterfacepicker
似乎存在一些错误,主要是在某些情况下无法正确“确定”某个值(Apple 提出的错误)。这意味着我必须使用许多其他可用的方法来解决这个问题。这是我使用的方法:
- (假设
PickerA
和PickerB
已存储在变量中。) - 使用
pickerDidFocus
方法触发计算PickerB
的当前位置(来自上面存储的值)及其 上限/下限。根据此范围计算PickerA
可接受的上限/下限。 - 当
PickerA
更改时,使用选择器中的默认@IBAction
更改以将所选值存储在另一个变量中。 - 使用
pickerDidSettle
等待PickerA
运动停止之前 做任何事情。计算新旧值之间的变化PickerA
,与之前计算的限制进行比较。如果在范围内, 更改PickerB
。 - 如果超出
PickerB
的范围,则弹出警报消息,并设置一个标志。 在原始InterfaceController
的willActivate
中,检查标志 并且,如果处于事件状态,setSelectedItemIndex
返回到可接受的范围内 范围。
这可能看起来有点过于复杂。特别是最后一步可能看起来有些夸张,但是,即使使用 pickerDidSettle
,我所经历的选择器的零星/不可靠行为也意味着我必须使用这种方法来保证之前有一个暂停重置选择器。
也许这会对其他人有所帮助!
关于ios - 限制拾取器移动范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399882/