Контроллер вида Dismiss не выполняется при использовании диалогов дизайна материала в iOS Swift

Я использую диалог дизайна материала для своего приложения для iOS, написанного с помощью swift. Вот краткая документация диалогов о дизайне материалов: https://material.io/develop/ios/components/dialogs/

У меня есть диалог, в котором есть 1 действие, и в блоке завершения действия я хочу закрыть контроллер представления и вернуться к предыдущему контроллеру представления. Проблема в том, что отклонение контроллера представления не работает. Все инструкции, которые записаны в блоке завершения, такие как распечатка чего-либо, выполняются за исключением отмены контроллера представления.

Вот мой код:

DispatchQueue.main.async {
        let alertStr = "Alert"
        let alertController = MDCAlertController(title: "Error", message: alertStr)
        let action = MDCAlertAction(title:"GoBack") { (action) in
            self.dismiss(animated: false, completion: nil)
        }
        alertController.addAction(action)
        self.present(alertController, animated:true, completion:nil)
    }

Буду признателен, если вы поможете мне разобраться в проблеме. Заранее спасибо!

2 ответа

Пара мыслей:

  1. dismiss(animated:completion:) "Отклоняет контроллер представления, который был представлен модально контроллером представления". Он не предназначен для отклонения контроллера представления, на который ссылается self,

    По общему признанию, dismiss будет: "Если вы вызовете этот метод на самом представленном контроллере представления, UIKit попросит представляющий контроллер представления обработать отклонение". Но вы не можете полагаться на это в UIAlertAction для кнопки, потому что вы не знаете, когда увольнение MDCAlertController и когда действие кнопки выполнено.

  2. Вы уверены, что представили контроллер представления и что он, например, не включил контроллер навигации?

  3. Хороший способ вернуться к контроллеру предыдущего вида - это развернуться (или см. TN2298). Это устраняет всю двусмысленность в отношении "толчка" и "настоящего" и dismiss отклонит представленный контроллер представления и вместо этого передаст сообщение в представляющий контроллер представления.

Ты пытался

  performSegue(withIdentifier: "ViewControllerSegue", sender: nil)

вам нужно выбрать свой viewController на верхней панели в желтом квадрате (имя - это то, что вы предварительно определили), щелкнуть правой кнопкой мыши и перетащить на следующий контроллер представления ---> Представить модально, затем выбрать стрелку и перейти к инспектору атрибутов и дать имя идентификатору,

Другие вопросы по тегам