Мое приложение имеет тенденцию иногда терять информацию о том, какой ответчик должен обрабатывать событие касания.
Моя ситуация:
- a XIB file defining 3 views:
- one view as the File's Owner's view
- 2 дополнительных представления, которые программно добавляются в иерархию представлений.
- Одно из подпредставлений (SubviewA) имеет
UIButton
, настроенное на отправку селектораmyAction:
вFirstResponder
при обнаружении события «Touch Up Inside». - SubviewA знает, как обращаться с
myAction:
В 99% случаев все проходит нормально. Когда пользователь нажимает кнопку, SubviewA обрабатывает сообщение myAction:
, и все в порядке. Но время от времени пользователи жалуются на то, что кнопка «зависает», и я фактически воспроизвел это сам пару раз, не имея возможности найти внятный сценарий, чтобы это происходило по требованию.
Мое расследование до сих пор:
- when nothing happens when tapping the button:
- my button detects the tap cause it gets highlighted when pressed
myAction:
не вызывается в SubviewA- остальная часть пользовательского интерфейса остается отзывчивой
Код, о котором я говорю, — это устаревший код, который я пытаюсь исправить. Наличие представления, реагирующего на событие для одного из его подпредставлений, кажется мне странной архитектурой. До сих пор я всегда использовал владельца файла, чтобы позаботиться о событиях касания, поэтому я указал, что цепочка респондентов идеально отвечает за ошибку. Но я не могу найти почему! Насколько я понимаю, поскольку кнопка не знает, как обрабатывать сообщение и к ней не подключен контроллер представления, она должна перенаправить его в свой супервизор (ButtonA, который знает, как с ним обращаться)!
Мои вопросы:
- любая идея о том, откуда может появиться ошибка? (цепочка ответчиков?)
- какие-либо комментарии о том, должно ли представление обрабатывать поведение своих кнопок самостоятельно или это должен делать контроллер представления?
Редактировать: у меня есть идея, как исправить ошибку: подключить действие кнопки прямо к SubviewA, а не использовать FirstResponder в Interface Builder. Причина, по которой я разместил этот вопрос, состоит в том, чтобы попытаться понять, почему цепочка респондентов время от времени не работает.