iOS Swift Navigation раскручивается с перенаправлением
Я хотел бы реализовать следующее: (Я использую навигационные контроллеры)
Представление A имеет несколько опций, которые определяют, какой путь выбрать. Первый отображает вид B, который затем отображает вид C с помощью навигационных контроллеров. Первый элемент панели инструментов выполняет раскрутку для просмотра А. Что работает. Второй элемент на панели инструментов я бы хотел не только раскрутить, но и перенаправить на Вид Е.
Код в контроллере представления выглядит так:
@IBAction func unwindToHomeController(segue: UIStoryboardSegue) {
self.performSegue(withIdentifier: "toPerson", sender: self)
}
Когда я щелкаю второй элемент на панели инструментов, отображается вид E, но вид A отображается сразу после небольшой задержки.
Как мне остановить отображение View A?
Возможно, есть лучший способ.
1 ответ
Вам нужно дождаться окончания анимации, чтобы выполнить переход к E:
class ViewController: UIViewController {
@IBAction func unwindToA(segue: UIStoryboardSegue) {
}
@IBAction func unwindToE(segue: UIStoryboardSegue) {
CATransaction.begin()
CATransaction.setCompletionBlock {
self.performSegue(withIdentifier: "E", sender: nil)
}
CATransaction.commit()
}
}
ОБНОВЛЕНО Чтобы избежать мигания, показывая A при нажатии E
1) Удалите функцию unwindToE:
extension ViewController {
@IBAction func unwindToA(segue: UIStoryboardSegue) {
}
// @IBAction func unwindToE(segue: UIStoryboardSegue) {
// CATransaction.begin()
// CATransaction.setCompletionBlock {
// self.performSegue(withIdentifier: "E", sender: nil)
// }
// CATransaction.commit()
// }
}
2) Создайте собственный переход:
class MyUnwindSegue: UIStoryboardSegue {
override func perform() {
guard let nav = source.navigationController else { return }
guard let root = nav.viewControllers.first else { return }
let viewControllers = [root, destination]
nav.setViewControllers(viewControllers, animated: true)
}
}
3) Обновите последовательность до MyUnwindSegue в раскадровке (убедитесь, что модуль выбран для вашего модуля проекта, а не пусто):