1

我有一个包含三个组件的选择器。

前两个组件依赖于最后一个。

所以它可能是:

  1. | 5 | M(线条代表不同的列)或 1" | 5" | 英尺

如果我正在移动第二列或第一列并且在它们停止旋转之前我将第三列从 FT 移动到 M 或反之亦然,然后当它仍在移动时它会崩溃应用程序。

我知道这种情况正在发生,因为在pickerView:didSelectRow:inComponent:UIPicker 的委托方法中,我正在根据第三列的最终值(即 M 或 FT)执行计算。

所以,简而言之

pickerView:didSelectRow:inComponent:即使用户以相反的顺序触摸它们, 它也会在第一列之前执行第三列。

有没有办法解决这个问题?

可能会这样,如果一个组件仍在旋转,用户就无法移动另一个组件?

非常感谢任何帮助

谢谢

汤姆

4

2 回答 2

3

我认为,当组件旋转时,它没有选定的值,因此它永远不会调用pickerView:didSelectRow:inComponent:一旦它停止旋转,它就会将消息发送给委托。第一个停止旋转的组件首先发送,而不是第一个接触的组件。这就是为什么您的第三列在前两列之前调用该方法,即使它是最后被触摸的。

我怀疑崩溃是由于尝试使用移动组件的 nil 选定行值执行操作而引起的。如果是这样,您可以通过在执行操作之前测试每个组件选择的值不是 nil 来避免崩溃。如果组件仍在旋转,那么您应该跳过操作,直到它们停止。

我认为不可能冻结组件。

于 2010-01-06T19:24:49.597 回答
2

您可以通过在组件顶部放置清晰的 UIView 来“冻结”组件。一旦一个组件开始旋转,您就可以显示清晰的视图以防止用户在其他组件上进行交互。

这应该会阻止此问题的发生。

于 2010-01-06T22:32:29.913 回答