我有一个有三个组件的选择器。
前两个组件取决于最后一个组件。
所以它可能是:
如果我移动第二列或第一列并且在它们停止旋转之前我将第三列从FT移动到M或反之亦然然后当它仍在移动时它会使应用程序崩溃。
我知道这种情况正在发生,因为在UIPicker的pickerView:didSelectRow:inComponent:
委托方法中,我正在根据第三列的最终值进行计算,即M或FT。
所以,在坚果中
即使用户以相反的顺序触摸它们,它也会在第一列之前的第三列上执行pickerView:didSelectRow:inComponent:
。
有什么方法可以解决这个问题吗?
可能这样做,如果一个组件仍在旋转,用户无法移动另一个组件?
非常感谢任何帮助
由于
汤姆
答案 0 :(得分:3)
我认为,当一个组件正在旋转时,它没有选定的值,因此它永远不会调用pickerView:didSelectRow:inComponent:
一旦它停止旋转,它就会将消息发送给代理。停止旋转的第一个组件首先发送,而不是第一个触摸的组件。这就是为什么你的第三列在前两个之前调用该方法的原因,即使它最后被触及。
我怀疑崩溃是由尝试使用移动组件的nil选定行值执行操作引起的。如果是这样,您可以通过在执行操作之前测试每个组件选择的值不是nil来避免崩溃。如果组件仍在旋转,那么您应该跳过操作直到它们停止。
我不认为冻结组件是可能的。
答案 1 :(得分:2)
您可以通过在其顶部放置清晰的UIView来“冻结”您的组件。只要一个组件开始旋转,您就可以显示清晰的视图,以防止用户在其他组件上进行交互。
这应该可以阻止此问题的发生。