Мое приложение имеет тенденцию иногда забывать, что респондент должен обрабатывать событие касания.
Моя ситуация:
- файл XIB, определяющий 3 представления:
- один просмотр как вид владельца файла
- 2 дополнительных представления, которые программно добавляются в иерархию представлений
- В одном из подпредставлений (SubviewA) есть
UIButton
, настроенный на отправку селектора myAction:
на FirstResponder
при обнаружении события «Touch Up Inside»
- SubviewA умеет обращаться
myAction:
99% времени, все идет хорошо. Когда пользователь нажимает кнопку, SubviewA принимает сообщение myAction:
, и все в порядке. Но время от времени пользователи жалуются на то, что кнопка «зависает», и я на самом деле сам ее пару раз воспроизводил, не имея возможности найти четкий сценарий, чтобы это произошло по требованию.
Мое расследование до сих пор:
- когда при нажатии кнопки ничего не происходит:
- моя кнопка определяет причину касания, когда она подсвечивается при нажатии
myAction:
не вызывается на SubviewA
- остальная часть интерфейса остается отзывчивой
Код, о котором я говорю, является устаревшим кодом, который я пытаюсь исправить. Наличие представления, отвечающего на событие для одного из его подвидов, звучит для меня странной архитектурой. До сих пор я всегда использовал владельца файла, чтобы позаботиться о сенсорных событиях, поэтому я указал, что цепочка респондента является идеальной причиной ошибки. Но я не могу найти почему! Насколько я понимаю, поскольку кнопка не знает, как обрабатывать сообщение, и к ней не подключен контроллер представления, она должна переслать его в суперпредставление (ButtonA, которое знает, как его обработать)!
Мои вопросы:
- есть идеи, откуда может появиться ошибка? (цепочка респондента?)
- любой комментарий о том, должен ли вид обрабатывать поведение своих кнопок сам или если контроллер представления должен это делать?
Изменить:
У меня есть идея, как исправить ошибку: подключить действие кнопки прямо к SubviewA, а не использовать FirstResponder в Интерфейсном Разработчике. Причина, по которой я разместил этот вопрос, состоит в том, чтобы попытаться понять, почему цепочка респондента время от времени не работает.