Swift 4 @IBAction UIButton action вызывается неправильно - PullRequest
0 голосов
/ 02 марта 2019

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

У меня есть кнопка UIB, которую я поместил в свойраскадровка, и я подключил его к @IBAction в контроллере представления.Каждый раз, когда я нажимаю кнопку, она выдает ошибку -[UIViewController openAlert]: unrecognized selector sent to instance

Функция не имеет аргументов (я пробовал с аргументом отправителя, и она вызывает openAlertWithSender вместо openAlert(sender:)), и я решил, чтоподключение кнопки к переменной в верхней части класса будет работать, но это дало мне новую ошибку: This class is not key value coding-compliant

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

Я попытался создать кнопку программным способом, и она вообще не будет отображаться на экране.

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

Мой код:

class OfflineViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

    // Hide the navigation bar
        navigationController?.setNavigationBarHidden(true, animated: animated)

        NetworkHandler.shared.addListener(listener: self)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // Show the navigation bar
        navigationController?.setNavigationBarHidden(false, animated: animated)
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        NetworkHandler.shared.removeListener(listener: self)

    }

    private func showMainController() -> Void {
        DispatchQueue.main.async {
            self.performSegue(withIdentifier: "NetworkAvailable", sender: self)
        }
    }

    @IBAction func openAlert() {
        let alert = UIAlertController(title: "Clicked", message: "You have clicked on the button", preferredStyle: .alert)

        self.present(alert, animated: true, completion: nil)
    }


}

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 марта 2019

Сначала убедитесь, что вы присвоили имя класса в IB для vc OfflineViewController

Во-вторых, добавьте этот метод

@IBAction func printMessage(_ sender:UIButton) { } 

Вместо openAlert кажется, что вы изменили его имяпосле того, как вы назвали его printMessage и IB инкапсулирует старое имя, которое больше не существует, следовательно, происходит сбой

Примечание: раскадровка - это файл xml за кулисами, поэтому каждое имя выхода / действия сохраняется до тех пор, пока выизмените его, и нет никакого механизма ошибки, чтобы сказать это при компиляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...