Контроллер вида 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 ответа
Пара мыслей:
dismiss(animated:completion:)
"Отклоняет контроллер представления, который был представлен модально контроллером представления". Он не предназначен для отклонения контроллера представления, на который ссылаетсяself
,По общему признанию,
dismiss
будет: "Если вы вызовете этот метод на самом представленном контроллере представления, UIKit попросит представляющий контроллер представления обработать отклонение". Но вы не можете полагаться на это вUIAlertAction
для кнопки, потому что вы не знаете, когда увольнениеMDCAlertController
и когда действие кнопки выполнено.Вы уверены, что представили контроллер представления и что он, например, не включил контроллер навигации?
Хороший способ вернуться к контроллеру предыдущего вида - это развернуться (или см. TN2298). Это устраняет всю двусмысленность в отношении "толчка" и "настоящего" и
dismiss
отклонит представленный контроллер представления и вместо этого передаст сообщение в представляющий контроллер представления.
Ты пытался
performSegue(withIdentifier: "ViewControllerSegue", sender: nil)
вам нужно выбрать свой viewController на верхней панели в желтом квадрате (имя - это то, что вы предварительно определили), щелкнуть правой кнопкой мыши и перетащить на следующий контроллер представления ---> Представить модально, затем выбрать стрелку и перейти к инспектору атрибутов и дать имя идентификатору,