UITapGesture внутри 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 ответ

Решение

Проблема в том, что ваш 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)
    }
}
Другие вопросы по тегам