在框架内点击手势不起作用
Posted
技术标签:
【中文标题】在框架内点击手势不起作用【英文标题】:UITapGesture inside Framework not working 【发布时间】:2018-03-26 22:05:29 【问题描述】:我正在尝试创建我的第一个 Cocoapod 框架,并且需要将一个简单的 UITapGestureRecognizer
附加到一个视图,但我无法从我的框架中调用点击手势 action
。我有:
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
let foo = Foo()
foo.attachTo(view: view)
我使用pod lib create Foo
创建了一个框架,里面是
public class Foo
public init()
public func attachTo(view: UIView)
let endpointGesture = UITapGestureRecognizer(target: self, action: #selector(selected(_:)))
view.backgroundColor = UIColor.blue
view.isUserInteractionEnabled = true
view.addGestureRecognizer(endpointGesture)
@objc private func selected(_ sender: UITapGestureRecognizer)
print("Gesture Recognized")
我可以看出视图已正确传递到框架中,因为构建应用程序会给我一个蓝屏。
将手势识别器和selected
函数移到ViewController
中也可以正常工作。点击视图会将Gesture Recognized
打印到控制台,所以我不理解框架发生了什么。
我已经尝试将-ObjC
链接器标志添加到框架中,但这似乎没有做任何事情。我错过了什么吗?
【问题讨论】:
您发布的代码看起来不错,而且您似乎也知道这一点。通常,框架中的手势旨在触发比print
更多的东西 - 在我的用例中,是给代表的消息。两个想法:(1)如果在print
语句上设置断点,会命中吗? (2) 如果是这样,您是否可以 (a) 为您的视图控制器创建一个协议/委托设置,或者 (b) 将事物重构(用于测试)到 UIButton
中以查看发生了什么?看起来您的print
确实没有受到打击。
缺少相关标签...
@dfd 设置断点似乎没有做任何事情,这让我相信选择器永远不会被调用。我无论如何都尝试创建一个协议/委托,但它没有像预期的那样调用selected
。
【参考方案1】:
问题是您的foo
变量没有保留。
如果您将foo
变量作为实例变量,它应该可以工作。
class ViewController: UIViewController
let foo = Foo() // this is now retained by the view controller
override func viewDidLoad()
super.viewDidLoad()
foo.attachTo(view: view)
【讨论】:
以上是关于在框架内点击手势不起作用的主要内容,如果未能解决你的问题,请参考以下文章