2016-02-15 1 views
0

У меня есть пользовательский класс контроллера iOS, который программно добавляет UIButton к заданному UIView. У этой кнопки есть связанный с ней UITapGestureRecognizer, но он работает только тогда, когда пользовательский контроллер является @propertyUIViewController, который вводит изображение и кнопку.UITapGestureRecognizer не (всегда) работает для целей, отличных от UIViewController

См. https://github.com/vasile/ios-gesture-recognizer/ с 2 примерами кнопок, первый не записывает жесты касания.

XCode project example

Может кто-нибудь объяснить, почему?

ответ

4

Это все о жизни объектов. Чтобы быть объектом кнопки при ее нажатии, целевой объект должен существует в момент нажатия кнопки.

Это не так для первой кнопки (ничего не произойдет), потому что цель - это только локальная переменная, которая сразу же исчезает. С другой стороны, другие целевые объекты являются постоянными. Например, свойство экземпляра контроллера вида сохраняется до тех пор, пока выполняется контроллер представления. И контроллер вида обычно очень долговечен; в частности, если он правильно используется, он будет работать до тех пор, пока кнопка будет действовать, если кнопка является подчиненным видом собственного представления контроллера!

+0

Спасибо, матовый, имеет смысл «целевой объект должен существовать», Apple должна добавить его в официальную документацию, потому что определение цели «Объект, который является получателем сообщений о действиях, отправленных получателем при распознавании жестов», слишком расплывчатым. –

+0

Я не думаю, что Apple должна быть ошибочной, не говоря уже о том, что объект, который не существует, не может работать. Это очевидно. Как я уже сказал, речь идет о жизни объектов. Это часть загадки, которую вы, кажется, не поняли (т. Е. Вещь, которая вызвала ваш вопрос). Но именно _key_ понимает жизнь объектов, если вы собираетесь делать объектно-ориентированное программирование! Ваш вопрос показывает, насколько это важно. – matt

 Смежные вопросы

  • Нет связанных вопросов^_^