Представьте контроллер представления, отклоните его и представьте другой в Swift
Таким образом, у меня есть корневой контроллер вида, который имеет кнопку, которая, когда пользователь нажимает на нее, представляет другой контроллер представления. Этот второй контроллер имеет опцию отклонения, которая просто возвращается к корневому контроллеру представления, и кнопку, которая, когда пользователь прикасается к нему, отклоняет текущий контроллер представления, чтобы он на секунду возвращался к корневому контроллеру представления и представлял другой. Переходя к первому используемому контроллеру:
let vc = FirstController()
self.present(vc, animated: true, completion: nil)
И когда в другом контроллере представления я выбираю кнопку, которая только отклоняет, я делаю это.
self.dismiss(animated: true, completion: nil)
Итак, для второго контроллера, который должен отклонить и представить другого, я попробовал следующее:
self.dismiss(animated: true, completion: {
let vc = SecondController()
self.present(vc, animated: true, completion: nil)
})
Но я получаю сообщение об ошибке:
Warning: Attempt to present <UINavigationController: 0xa40c790> on <IIViewDeckController: 0xa843000> whose view is not in the window hierarchy!
Ответы
Ответ 1
Ошибка возникает из-за того, что вы пытаетесь представить SecondController из FirstController после того, как вы упустили FirstController. Это не работает:
self.dismiss(animated: true, completion: {
let vc = SecondController()
// 'self' refers to FirstController, but you have just dismissed
// FirstController! It no longer in the view hierarchy!
self.present(vc, animated: true, completion: nil)
})
Эта проблема очень похожа на вопрос, который я ответил вчера.
Модифицированный для вашего сценария, я бы предложил следующее:
weak var pvc = self.presentingViewController
self.dismiss(animated: true, completion: {
let vc = SecondController()
pvc?.present(vc, animated: true, completion: nil)
})