iOS Swift: отправка действия (управляющего события) из подкласса UIImageView - PullRequest
0 голосов
/ 21 октября 2019

Как я могу отправить действие (подобный вид события касания) из подкласса UIImageView в View Controller.

Вот справочный ответ , который я хочу применить для UIImageView. (UIImageView не имеет UIControl в своей иерархии суперклассов)

Ниже приведен мой код, но он не работает, поскольку я не знаю, как реализовать, что мне нужно.

class TappableImageView: UIImageView {
  // Initializer methods.....

   //------------------------------------------
    private func addTapGesture(){
        let tapOnImage = UITapGestureRecognizer(target: self, action: #selector(TappableImageView.handleTapGesture(tapGesture:)))
        self.isUserInteractionEnabled = true
        self.addGestureRecognizer(tapOnImage)

    }


    //----------------------------------------------
    @objc func handleTapGesture(tapGesture: UITapGestureRecognizer) {
        // how can I send tap/click event to all view controllers, where I've used this image  from this point. 
    }
}

Есть ли альтернативные / другие решения, которые могут работать для меня?

1 Ответ

1 голос
/ 21 октября 2019

Я порекомендую вам использовать затвор для обработки отводов:

class TappableImageView: UIImageView {

   var handleTap: (() -> Void)? = nil


   //------------------------------------------
    private func addTapGesture(){
        let tapOnImage = UITapGestureRecognizer(target: self, action: #selector(TappableImageView.handleTapGesture(tapGesture:)))
        self.isUserInteractionEnabled = true
        self.addGestureRecognizer(tapOnImage)

    }


    //----------------------------------------------
    @objc func handleTapGesture(tapGesture: UITapGestureRecognizer) {
        handleTap?()
    }
}

И тогда, в вашем контроллере просмотра, вы можете использовать это, например, в viewDidLoad методе:

override func viewDidLoad() {
    super.viewDidLoad()
    yourTappableImageView.handleTap = { 
       print("an image view was tapped")
    }
}

Предполагается, что ваш TappableImageView хранится в переменной с именем yourTappableImageView.

...