框架内的UITapGesture不起作用

时间:2018-03-26 22:05:29

标签: swift cocoapods selector uitapgesturerecognizer swift-framework

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

1 个答案:

答案 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)
    }
}