2015-10-28 146 views
0

(我的问题是与WKInterfacePicker,但对于标准UIPickerView的想法也可能适用。)极限范围

我想知道如果任何人有我如何可以限制可选值范围内的任何建议在WKInterfacePicker

解释:比方说,我有两个选择器,A和B.每个都有一个唯一的数组值。如果用户向上或向下移动选取器A,则通过相同的索引更改,使选取器B沿相反的方向移动。问题是如果选择器A的移动将超过B的数值(<0>array.count)。我需要将选择器A上的可选值的范围保持在选择器B的范围内,即使A可能在其自己的数组中具有较高或较低的索引值。

我已经尝试创建picker A的值'slice'来匹配picker B的限制范围,但是这会改变picker A的索引编号(即索引x不再与相同的值有关)。

我很理想地寻找一种方法来阻止用户使用选取器A超过给定的索引范围。任何想法/想法都非常受欢迎。提前致谢!

回答

0

没有收到任何答案,但认为我会发布我如何解决这个问题,以防其他人有这个问题。

首先,在目前的形式下,wkinterfacepicker似乎存在一些bug,主要是它在某些情况下(苹果引发的bug)不能正确解决值问题。这意味着我必须使用其他一些可用的方法来解决这个问题。这是我所使用的方法:以触发的 当前位置的计算

  1. (假定两个PickerAPickerB已经被存储在变量初始/先前选择的值。)
  2. 使用pickerDidFocus方法(来自上面存储的值)以及其上限/下限的 。根据此范围计算PickerA的可接受上限/下限值。
  3. PickerA更改时,使用选择器 更改中的默认@IBAction将选定值存储在另一个变量中。
  4. 使用pickerDidSettle等待PickerA运动停止前 做任何事情。计算 PickerA的旧值和新值之间的变化,并与先前计算的限值进行比较。如果在范围内, 更改为PickerB
  5. 如果超出范围PickerB,弹出警告消息,并设置一个标志。 在willActivate为原始InterfaceController,检查标志 ,如果有效,setSelectedItemIndex回到在可接受的 范围内。

这看起来有点过于复杂。特别的最后一步可能看起来过于顶端,然而即使在使用pickerDidSettle时,我也会遇到零星的/不可靠的行为,这意味着我必须使用这种方法来保证重置拾取器之前有一段暂停。

也许这会帮助别人!