Контроллер вида Dismiss не работает при использовании диалогов дизайна материалов в iOS Swift - PullRequest
0 голосов
/ 05 января 2019

Я использую диалог дизайна материала для своего приложения для 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 ]

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

Пара мыслей:

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

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

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

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

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

пытались ли вы

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

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

...