UIPicker вылетает из приложения, если я вращаю один компонент одновременно с другим - PullRequest
1 голос
/ 06 января 2010

У меня есть сборщик с тремя компонентами.

Первые два компонента зависят от последнего.

Так может быть:

  1. | 5 | M (строки представляют разные столбцы) или же 1 "| 5" | FT

Если я перемещаю второй или первый столбец и до того, как они перестают вращаться, я перемещаю третий столбец с FT на M или наоборот, а затем, пока он все еще движется, приложение вылетает.

Я знаю, что это происходит, потому что в pickerView:didSelectRow:inComponent: методе делегирования для UIPicker я выполняю вычисление на основе окончательного значения третьего столбца, т. Е. M или FT.

ТАК В ОРЕХОВОЙ ОБОЛОЧКЕ

Он выполняет pickerView:didSelectRow:inComponent: в третьем столбце перед первым столбцом, даже если пользователи касались их в обратном порядке.

Есть ли способ решить эту проблему?

Возможно, сделать так, чтобы, если компонент все еще вращался, пользователь не мог переместить другой компонент?

Любая помощь высоко ценится

Спасибо

Tom

Ответы [ 2 ]

3 голосов
/ 06 января 2010

Я думаю, что когда компонент вращается, у него нет выбранного значения, поэтому он никогда не вызывает pickerView:didSelectRow:inComponent: Как только он останавливает вращение, он отправляет сообщение делегату. Первый компонент, который останавливает вращение, отправляет первым, а не первый компонент, которого коснулись. Вот почему ваш третий столбец вызывает метод перед первыми двумя, даже если он затрагивается последним.

Я подозреваю, что сбой вызван попыткой выполнить операцию, используя нулевое значение выбранной строки движущегося компонента. Если это так, вы можете избежать сбоя, проверив, что значение каждого выбранного компонента не равно нулю перед выполнением операции. Если компоненты все еще вращаются, вам следует пропустить операцию, пока они не остановятся.

Я не думаю, что возможно заморозить компоненты.

2 голосов
/ 07 января 2010

Вы можете «заморозить» свои компоненты, поместив поверх них прозрачные UIViews. Как только один компонент начинает вращаться, вы можете показать четкие представления, чтобы предотвратить взаимодействие пользователя с другими компонентами.

Это должно предотвратить возникновение этой проблемы.

...