Swift

#ios #swift #uiview #uiviewcontroller #extension-methods

Вопрос:

Я не могу добавить действие в свой UIView при реализации в UIView Extension .

Расширение UIView

 extension UIView { public func addAction(_ selector: Selector) {  isUserInteractionEnabled = true  let gesture = UITapGestureRecognizer(target: self, action: selector)  self.addGestureRecognizer(gesture)  } }  

В функции в ViewController

 func setAction(_ button: UIView, _ selector: Selector?) {  button.isUserInteractionEnabled = true  let gesture = UITapGestureRecognizer(target: self, action: selector)  button.addGestureRecognizer(gesture)  }  @objc func hello(){  print("Hello") }  

У меня есть контроллер UIView под названием menu, и я хочу, чтобы он выводил «Привет», когда я нажимаю на него.

Если я выполню метод 1, я получу ошибку.

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView hello:]: unrecognized selector sent to instance 0x11fd4ca30'  

если я выполню метод 2, он будет работать просто отлично.

1 — menu.addAction(#selector(hello))

2 — setAction(menu, #selector(hello))

Но я, возможно, буду использовать это очень часто. Как мы можем добавить действие в UIView с помощью расширения?

Ответ №1:

в расширении tapgesture не найден hello метод в UIView классе.

 extension UIView { public func addAction(_ selector: Selector, target: AnyObject) {  isUserInteractionEnabled = true  let gesture = UITapGestureRecognizer(target: target, action: selector)  self.addGestureRecognizer(gesture)  } }  

добавьте один параметр в addAction метод для цели действия.