Закрытие UIAlertAction не вызывается, когда представление контроллера является модальным - PullRequest
0 голосов
/ 14 октября 2019

У меня есть UIViewController, который встроен в UINavigationController, который представляется модально поверх keyWindow.rootViewController моего приложения. Когда я представляю UIAlertController на любом экране представленного навигационного контроллера, контроллер предупреждений отображается правильно, но после нажатия кнопки закрытия для любого из UIAlertAction не вызывается.

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

Код для представления оповещения очень прост, вот фрагмент:

    // Creating Alert
func createAlert() -> UIAlertController {
           let actions: [UIAlertAction] = [
                    UIAlertAction(title: "Something", style: .default, handler: { _ in
                        self.setOriginalQueue(with: items, description: description, identifier: identifier)
                        self.setQueue()
                    }),
                    UIAlertAction(title: "Cancel", style: .cancel, handler: { _ in
                        normal()
                    })
                ]

                let alert = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet, actions: actions)

    return alert
}

    // In ViewController
        DispatchQueue.main.async {
            self.present(alert, animated: true, completion: nil)
        }

Итак, вопрос в том, почему не называются замыкания?

Ответы [ 3 ]

1 голос
/ 14 октября 2019

UIAlertController не содержит аргумента четырех типов. См. документ .

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

Для удобства каждого я помещу весь источник класса контроллера Modal viewздесь.

class ModalViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

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

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

    func createAlert() -> UIAlertController {

        let actions: [UIAlertAction] = [
                        UIAlertAction(title: "Something", style: .default, handler: { _ in
                            print("Something")
                        }),
                        UIAlertAction(title: "Cancel", style: .cancel, handler: { _ in
                            print("Cancel")
                        })
                    ]
        let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .actionSheet)

        for action in actions {
            alert.addAction(action)
        }

        return alert
    }
}
0 голосов
/ 14 октября 2019

Необходимо указать имя метода при подаче оповещения

self.present(createAlert(), animated: true, completion: nil)
0 голосов
/ 14 октября 2019

Неверная строка.

let alert = UIAlertController(title: nil, message: "message" , preferredStyle: .actionSheet, actions: actions)

Вы должны получить такую ​​ошибку

Type of expression is ambiguous without more context

Измените ее следующим образом:

return UIAlertController(title: YourTitle, message: YourMessage, preferredStyle: UIAlertController.Style.actionSheet)

Так что это можетработа.

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