【问题标题】:UITapGestureRecognizer not (always) working for targets that are different than UIViewControllerUITapGestureRecognizer 不能(总是)为不同于 UIViewController 的目标工作
【发布时间】:2016-02-15 21:32:50
【问题描述】:

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

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

谁能解释一下原因?

【问题讨论】:

    标签: ios objective-c uikit uitapgesturerecognizer


    【解决方案1】:

    这都是关于对象生命周期的。为了在点击按钮时成为按钮的目标,目标对象必须在点击按钮时存在

    第一个按钮不是这样(什么都不会发生),因为目标只是一个立即不存在的局部变量。另一方面,其他目标对象是持久的。例如,视图控制器实例的属性与视图控制器一样长。并且视图控制器通常寿命很长;特别是,如果使用得当,如果按钮是视图控制器自己的视图的子视图,它的寿命与按钮一样长!

    【讨论】:

    • 感谢matt,“目标对象必须存在”是有道理的,Apple应该将其添加到官方文档中,因为目标定义An object that is the recipient of action messages sent by the receiver when it recognizes a gesture太模糊了。
    • 我不认为 Apple 会因为没有明确提及不存在的对象不能做任何工作而受到指责。这很明显。正如我所说,这实际上与对象生命周期有关。这就是您似乎不理解的难题(即提示您问题的事情)。但是,如果您要进行面向对象的编程,了解对象的生命周期是关键!您的问题表明了它的重要性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多