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 в раскадровке (убедитесь, что модуль выбран для вашего модуля проекта, а не пусто):

Использование пользовательских раскрутки Segue

Другие вопросы по тегам