UITapGestureRecognizer 不(总是)为不同于 UIViewController 的目标工作
UITapGestureRecognizer not (always) working for targets that are different than UIViewController
我有一个自定义 iOS 控制器 class,它以编程方式将 UIButton
添加到给定的 UIView
。该按钮有一个与之关联的 UITapGestureRecognizer
,但仅当自定义控制器是嵌入视图和按钮的 UIViewController
的 @property
时,它才有效。
参见 https://github.com/vasile/ios-gesture-recognizer/ 的 2 个按钮示例,第一个不记录点击手势。
有人可以解释为什么吗?
一切都与对象的生命周期有关。为了在点击按钮时成为按钮的目标,点击按钮时目标对象必须存在。
第一个按钮 (Nothing Will Happen) 并非如此,因为目标只是一个局部变量,会立即消失。另一方面,其他目标对象是持久的。例如,视图控制器实例的 属性 会在视图控制器存在时一直存在。视图控制器通常寿命很长;特别是,如果使用得当,如果按钮是视图控制器自身视图的子视图,它的寿命与按钮一样长!
我有一个自定义 iOS 控制器 class,它以编程方式将 UIButton
添加到给定的 UIView
。该按钮有一个与之关联的 UITapGestureRecognizer
,但仅当自定义控制器是嵌入视图和按钮的 UIViewController
的 @property
时,它才有效。
参见 https://github.com/vasile/ios-gesture-recognizer/ 的 2 个按钮示例,第一个不记录点击手势。
有人可以解释为什么吗?
一切都与对象的生命周期有关。为了在点击按钮时成为按钮的目标,点击按钮时目标对象必须存在。
第一个按钮 (Nothing Will Happen) 并非如此,因为目标只是一个局部变量,会立即消失。另一方面,其他目标对象是持久的。例如,视图控制器实例的 属性 会在视图控制器存在时一直存在。视图控制器通常寿命很长;特别是,如果使用得当,如果按钮是视图控制器自身视图的子视图,它的寿命与按钮一样长!