Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Отклонить второй 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

iosswiftviewcontrollerdismiss

Ответы

Ответ 1 · рейтинг 4 · Harshal Valanda

Попробуйте это:

Вы можете отклонить свой presentingViewController из контроллера дочернего представления, как показано ниже.

self.presentingViewController?.dismiss(animated: true, completion: nil)

Когда вы добавляете ViewController в качестве childViewController

self.parent?.dismiss(animated: true, completion: nil)

Если этот контроллер представления является дочерним элементом содержащего контроллера представления (например, контроллера навигации или контроллера панели вкладок),

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, тогда вы можете использовать:

self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)

Ответ 3 · Oleg Danu

Прежде всего попробуйте отключить VC b от самого себя, не предъявляя VC c просто для проверки его работы, используя: self.dismiss(animated: true, completion: nil) или если VC b встроен в навигационный контроллер, вот так: self.navigationController?.dismiss(animated: true, completion: nil)

Если тот, что описан выше, работает, я бы предложил вам реализовать протокол делегирования, в котором VC будет делегировать VC b увольнение, когда бы это ни было необходимо. Вы также можете использовать для этого блок завершения, содержащий код dismiss.

Ответ 4 · Vignesh Davins

Надеюсь, это работает

// Call inside View controller C
        self.presentingViewController?.dismissViewControllerAnimated(false, completion: nil)
        self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)

Ответ 5 · Ugo Arangino

Как насчет Presenter или Coordinator.

Этот экземпляр будет инициализировать все эти VC, а также представлять их. Оттуда вы также можете отклонить их.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы