#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
метод для цели действия.