Я sublcassed в Свифт 3 в UIButton
подкласс, который написан на Objective-С.
Когда я пытаюсь добавить цель, она завершается с кодом ошибки:
class ActionButton: JTImageButton {
func action() {
}
func configure()) {
// ...
self.addTarget(self, action: #selector(self.action()), for: .touchUpInside)
// error:
// Argument of '#selector' does not refer to an '@objc' method, property, or initializer
}
}
Проблема в том, что в #селектора(самовыдвижение.действие())
, самостоятельно.действие ()
- это HTTP, то call_. Вы Don'т хотите call метод; вы хотите name метод. Сказать `#селектора(действий) вместо: потерять скобки, плюс там's нет необходимости в "я".
Все, что вам нужно сделать, это пометить функцию как `@взаимодействию и там's нет необходимости ссылаться на " Я " или скобочки
class ActionButton: JTImageButton {
@objc func btnAction() {
}
func configure() {
// ...
self.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
// error:
// Argument of '#selector' does not refer to an '@objc' method, property, or initializer
}
}
Вы даже можете сделать это "частный", если вы хотите
Добавлено из комментариев на другой ответ: функции действия() это не просто плохой выбор для имени функции и действия, он не сможет построить. (Вы можете использовать его в качестве параметра функции входного сигнала, хотя, который я делаю для наглядности при прохождении в целевой/действия в методе init (), которая устанавливает эти вещи.) Я'м замена этого с MyAction() для ясности.
Попробуйте это:
self.addTarget(self, action: #selector(MyAction), for: .touchUpInside)
Тот сказал, гораздо лучше дизайн, чтобы переместить MyAction() функция кнопки суперпанель, поскольку это делает вещи более выравниваются с базового проектирования MVC:
Суперпанель:
let myButton = ActionButton()
// include other button setup here
myButton.addTarget(self, action: #selector(MyAction), for: .touchUpInside
func action(_ sender: ActionButton) {
// code against button tap here
}
Альтернативой кодирования для этого, удерживая "в действии () на" метод в-представление-контроллер, но подвижным только в "addTarget" и в кнопку:
self.addTarget(superview?, action(superview?.MyAction), for: .touchUpInside)
Почему я прошу Вас рассмотреть вопрос о переходе в "MyAction () на" Метод суперпанель? Двоякой:
Если вы Don'т ум добавления дополнительной функции, вы могли бы вложить функцию.
self.addTarget(self, action: myAction, for: UIControlledEvent)
myAction(){
@obj.methodYouWantToCall(//parameters//)
}