我试图创建我的第一个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
链接器标志添加到框架中,但这似乎没有做任何事情。我错过了什么吗?
答案 0 :(得分:0)
问题是您的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)
}
}