-1

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

4

1 回答 1

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)
    }
}
于 2018-03-27T16:14:43.697 回答