Покажите и распустите UIAlertController в Swift 4 - PullRequest
0 голосов
/ 28 августа 2018

Я объявил глобальную переменную для UIAlertViewController, чтобы иметь возможность показывать и отклонять ее в другом методе внутри моего класса. Я отобразил два вида оповещений: во-первых, оповещение с помощью кнопки, которая будет отображаться при возникновении ошибки или для отображения информационного сообщения. Второе - это предупреждение без кнопки, которое будет отображаться как сообщение о прогрессе.

Вот пример кода:

private var alert: UIAlertController? // global declaration

private func showProgressMessage(sender viewController: UIViewController, message alertMessage: String)
{
    DispatchQueue.main.async
    {
        self.alert= UIAlertController(title: "", message: alertMessage, preferredStyle: .alert)
        viewController.present(self.alert!, animated: true, completion: nil)
    }
}

private func showAlertMessage(sender viewController: UIViewController, title alertTitle: String, message alertMessage: String)
{
    DispatchQueue.main.async
    {
        self.alert= UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert)

        self.alert!.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        viewController.present(self.alert!, animated: true, completion: nil)
    }
}

private func method1()
{
    DispatchQueue.global().async
    {
        // some code here
        self.showProgressMessage(sender: self, message:  "Processing...")
        // some code here
    }
}

private func method2()
{
    // some code here
    self.alert!.dismiss(animated: false)
    {
        self.showAlertMessage(sender: self, message:  "Done")
    }

    self.displayOtherViewController()
}

private func displayOtherViewController()
{
    self.alert?.dismiss(animated: false)
    {
        if let viewController = self.storyboard?.instantiateViewController(withIdentifier: "Sample")
        {
            let view = viewController as! SampleViewController

            view .modalTransitionStyle = .crossDissolve

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

В методе 2 для повторного отображения предупреждения потребуется несколько секунд, как и в контроллере вида. Как правильно показывать и отклонять UIAlertController в Swift 4?

1 Ответ

0 голосов
/ 28 августа 2018

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

private func method2() {
    DispatchQueue.main.async {
        self.alert!.dismiss(animated: false) {
            self.showAlertMessage(sender: self, message:  "Done")
        }
        self.displayOtherViewController()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...