Отклонить второй ViewController из третьего ViewController
Автор вопроса: bakhtiar masoodОтветов: 5
Я пытаюсь отклонить VC b от VC c, где VC c является всплывающим окном и имеет кнопку для выхода, но она не работает. Структура потока
VC a ----presents modally----> VC b ----presents a popover----> VC c
Когда кнопка во всплывающем окне нажата, VC c и VC b должны быть закрыты, чтобы вызвать (VC a)ViewWillAppear.
Покажите код, который вы пробовали Paulw11 14.07.2017
я пробовал это, но это не работает: self.presentingViewController?.presentingViewController?.dismiss(анимация: правда, завершение: ноль) bakhtiar masood 14.07.2017
Не могли бы вы поделиться кодом, представляющим VC a Manikanta Chintapalli 14.07.2017
Убедитесь, что вы видите этот вопрос. Это Objective-C, но есть отличный подробный ответ. Также см. здесь Honey 14.07.2017
Если этот контроллер представления является дочерним элементом содержащего контроллера представления (например, контроллера навигации или контроллера панели вкладок),
weak open var parent: UIViewController? { get }
Контроллер представления, который был представлен этим контроллером представления или его ближайшим предком.
open var presentedViewController: UIViewController? { get }
Контроллер представления, который представил этот контроллер представления (или его самый дальний предок).
open var presentingViewController: UIViewController? { get }
Ответ 2 · Nikhlesh Bagdiya
Если ViewControllers имеет иерархию, например
VC a ----представлен как self.present(objects, animated: true, completion: nil) модально----> VC b ---- представлен как self.present(objects, animated: true, completion: nil) popover----> VC c
И есть кнопка на VC c, чтобы вернуться к VC a, тогда вы можете использовать:
Прежде всего попробуйте отключить VC b от самого себя, не предъявляя VC c просто для проверки его работы, используя: self.dismiss(animated: true, completion: nil) или если VC b встроен в навигационный контроллер, вот так: self.navigationController?.dismiss(animated: true, completion: nil)
Если тот, что описан выше, работает, я бы предложил вам реализовать протокол делегирования, в котором VC будет делегировать VC b увольнение, когда бы это ни было необходимо. Вы также можете использовать для этого блок завершения, содержащий код dismiss.