Swift4 - UIButton использует addTarget в UIView с ошибкой - PullRequest
0 голосов
/ 19 января 2019

Это код с addTarget в required init в UIVIew

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    hiddenButton = self.viewWithTag(9000) as? UIButton
    hiddenButton.addTarget(self, action: "hiddenCameraAction:", for: .touchUpInside)
}

это моя функция выбора

func hiddenCameraAction(_ sender: Any)  {
    //Do something
}

когда я нажимаю кнопку в UIView, приложение вылетает с ошибкой:

TeachSystem [27065: 8131674] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [TeachSystem.CameraView hiddenCameraAction:]: нераспознанный селектор, отправленный экземпляру 0x121d11050' * Первый вызов стека вызовов: (0x1ee830ec4 0x1eda01a40 0x1ee749c24 0x21bb74558 0x1ee8367dc 0x1ee83848c 0x21bb48454 0x21b5d5d0c 0x21b5d602c 0x21b5d502c 0x21bb81bac 0x21bb82e10 0x21bb6210c 0x21bc30f68 0x21bc33960 0x21bc2c450 0x1ee7c11f0 0x1ee7c1170 0x1ee7c0a54 0x1ee7bb920 0x1ee7bb1f0 0x1f0a34584 0x21bb46d40 0x105039f40 0x1ee27abb4) libc ++ abi.dylib: завершается с необработанным исключением типа NSException

Вопрос: Как устранить эту ошибку?

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Все, что вам нужно сделать, это поместить строку в скобки.

action: ("hiddenCameraAction:")

... однако, это устарело способ достижения того, что вам нужно.


Я бы порекомендовал вам начать использовать селектор, который является более безопасным, поскольку компилятор немедленно сообщает об ошибке, и код не будет работать с неверным именем метода или чем-то подобным.

Синтаксис: #selector(method(externalParameter:))


enter image description here

... вы можете просто начать печатать, и компилятор подскажет, какой метод Objective-C вы можете поместить в

action: #selector(hiddenCameraAction(_:))
0 голосов
/ 19 января 2019

Действие должно быть определено как #selector, а функция должна иметь @objc умозаключение.

hiddenButton.addTarget(self, action: #selector(hiddenCameraAction(_:)), for: .touchUpInside)

hiddenCameraAction функция

@objc func hiddenCameraAction(_ sender: Any)  {
    //Do something
}

Вывод @objc позволяет методу hiddenCameraAction быть доступным для среды выполнения Objective-C.

0 голосов
/ 19 января 2019

действие должно быть определено как #selector:

hiddenButton.addTarget(self, action: #selector(hiddenCameraAction(_:)), for: .touchUpInside). 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...