点击框架内的手势不起作用

UITapGesture inside Framework not working

我正在尝试创建我的第一个 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 链接器标志添加到框架中,但这似乎没有任何作用。我错过了什么吗?

问题是您的 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)
    }
}