如果我同时旋转一个组件,UIPicker会崩溃应用程序

时间:2010-01-06 18:27:28

标签: iphone uipickerview

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

前两个组件取决于最后一个组件。

所以它可能是:

  1. | 5 | M(线代表不同的列) 要么 1“| 5”| FT
  2. 如果我移动第二列或第一列并且在它们停止旋转之前我将第三列从FT移动到M或反之亦然然后当它仍在移动时它会使应用程序崩溃。

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

    所以,在坚果中

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

    有什么方法可以解决这个问题吗?

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

    非常感谢任何帮助

    由于

    汤姆

2 个答案:

答案 0 :(得分:3)

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

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

我不认为冻结组件是可能的。

答案 1 :(得分:2)

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

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