ios - UITapGestureRecognizer 不(总是)为不同于 UIViewController 的目标工作

标签 ios objective-c uikit uitapgesturerecognizer

我有一个自定义 iOS Controller 类,它以编程方式将 UIButton 添加到给定的 UIView。该按钮有一个与之关联的 UITapGestureRecognizer,但它仅在自定义 Controller 是嵌入 View 和按钮的 UIViewController@property 时才有效.

参见 https://github.com/vasile/ios-gesture-recognizer/有 2 个按钮示例,第一个不记录点击手势。

XCode project example

谁能解释一下为什么?

最佳答案

一切都与对象的生命周期有关。为了在按钮被点击时成为按钮的目标,目标对象必须在按钮被点击时存在

第一个按钮(Nothing Will Happen)并非如此,因为目标只是一个局部变量,会立即消失。另一方面,其他目标对象是持久的。例如, View Controller 实例的属性会在 View Controller 存在时一直存在。 View Controller 通常生命周期很长;特别是,如果使用得当,如果按钮是 View Controller 自身 View 的 subview ,它的生命周期与按钮一样长!

关于ios - UITapGestureRecognizer 不(总是)为不同于 UIViewController 的目标工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419485/

相关文章:

ios - NSFetchedResultsController尝试插入nil对象

objective-c - 核心数据-访问模拟器创建的sqlite文件?

ios - CollectionView中的程序化搜索栏实现问题

macos - Mac-catalyst - Mac Catalyst 应用程序的最小窗口大小

ios - 呈现/呈现 View Controller 和父/ subview Controller 之间的交互是否在任何地方记录?

iOS - 隐藏在键盘下的 UIAlertController

ios - 从 Swift 框架加载 ViewController

ios - 在隐藏状态栏的同时保持 UINavigationBar 的大小

ios - CoreData 获取子项的父项

ios - 不给superview加约束,可以吗?