ios - 限制拾取器移动范围

标签 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 超过给定的索引范围。任何想法/想法都非常受欢迎。提前致谢!

最佳答案

没有收到答案,但我想我会发布我是如何解决这个问题的,以防其他人遇到这个问题。

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

  1. (假设 PickerAPickerB 已存储在变量中。)
  2. 使用pickerDidFocus方法触发计算 PickerB 的当前位置(来自上面存储的值)及其 上限/下限。根据此范围计算 PickerA 可接受的上限/下限。
  3. PickerA 更改时,使用选择器中的默认 @IBAction 更改以将所选值存储在另一个变量中。
  4. 使用pickerDidSettle等待PickerA运动停止之前 做任何事情。计算新旧值之间的变化 PickerA,与之前计算的限制进行比较。如果在范围内, 更改 PickerB
  5. 如果超出 PickerB 的范围,则弹出警报消息,并设置一个标志。 在原始 InterfaceControllerwillActivate 中,检查标志 并且,如果处于事件状态,setSelectedItemIndex 返回到可接受的范围内 范围。

这可能看起来有点过于复杂。特别是最后一步可能看起来有些夸张,但是,即使使用 pickerDidSettle,我所经历的选择器的零星/不可靠行为也意味着我必须使用这种方法来保证之前有一个暂停重置选择器。

也许这会对其他人有所帮助!

关于ios - 限制拾取器移动范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399882/

相关文章:

ios - 在 SceneKit 中将极高的分辨率映射到球体

ios - Objective C UIViewController 子类?

ios - UILabel 与可读指南对齐适用于 iPad,但不适用于手机

swift - iOS 解析 - 架构 i386 的 undefined symbol - iPhone 4s、iPhone 5

ios - 使用 swift 从默认系统图标创建 UIImage

swift - 确定 WKInterfaceLabel 的字体大小和粗细 - 等宽字体需要

ios - Cocoa Touch Framework 不再与 WatchKit 扩展兼容?我需要 watch 框架?

ios - 从 csv 文件动态分配值给 swift 字典

ios - 自定义 Watchkit 概览布局

ios - 如何使用 Swift 在 iOS 中将字符串转换为 MD5 哈希值?