限制拾取器的移动范围

时间:2015-10-28 19:26:37

标签: ios swift watchkit apple-watch

(我的问题在于WKInterfacePicker,但标准UIPickerView的提示可能也适用。)

我想知道是否有人就如何限制WKInterfacePicker上的可选值范围提出任何建议?

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

我尝试创建一个选择器A值的“切片”以匹配选择器B的限制范围,然后这会改变选择器A上的索引编号(即索引 x 不再属于相同的价值)。

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

1 个答案:

答案 0 :(得分:0)

没有收到答案,但我想如果有其他人有这个问题,我会发布我的工作方式。

首先,目前形式的wkinterfacepicker似乎存在一些错误,主要是因为它并没有“解决”问题。在某些情况下正确处理某个值(Apple提出的错误)。这意味着我必须使用许多其他可用的方法解决这个问题。这是我使用的方法:

  1. (假设PickerAPickerB的初始/先前选择的值 pickerDidFocus已存储在变量中。)
  2. 使用PickerB方法触发计算 PickerA的当前位置(来自上面存储的值)及其 上限/下限。根据此范围计算PickerA的可接受的上/下值。
  3. 更改@IBAction后,请使用选择器中的默认pickerDidSettle 更改以将所选值存储在另一个变量中。
  4. 使用PickerA等待PickerA移动之前停止 做任何事情。计算新旧值之间的变化 PickerB,与之前计算的限制进行比较。如果在范围内, 更改为PickerB
  5. 如果超出willActivate的范围,请弹出警告消息,然后设置标记。 在InterfaceController原始setSelectedItemIndex中,检查标记 并且,如果有效,pickerDidSettle回到可接受范围内 范围。
  6. 这看起来有点过于复杂。特别是最后一步可能看起来过于顶级,但是即使使用{{1}},我所经历的拣货员的零星/不可靠行为也意味着我必须使用这种方法来确保在重置拣货员之前有暂停

    也许这会帮助别人!