назначение пользовательского пункта назначения для popToRootViewController swift 4

Я использую navigationController? .PopToRootViewController (animated: true), чтобы отклонить текущее представление до предыдущего. Мои отношения с контроллером представления выглядят так.

VC1->VC2
VC1->VC3
VC3->VC2

Когда клиент находится в VC2, я хочу вернуть контроллер навигации в VC1. Это отлично работает, когда rootviewcontroller установлен на VC1. Однако, когда клиент использует переход от VC3 для входа в VC2, rootviewcontroller устанавливается на VC3, а контроллер навигации выскакивает на VC3.

Я попытался изменить rootviewcontroller вот так.

 // set root view controller
    let appdelegate = UIApplication.shared.delegate as! AppDelegate
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let VC1 = mainStoryboard.instantiateViewController(withIdentifier: "VC1") as! FirstViewController
    appdelegate.window!.rootViewController = VC1
    navigationController?.popToRootViewController(animated: true)

Но на самом деле это возвращает контроллер представления к корневому контроллеру представления (VC1) даже до того, как будет выполнена строка «navigationController? .PopToRootViewController (animated: true)», поэтому анимации нет.

Есть ли способ установить rootviewcontroller контроллера навигации, не представляя сразу корневой контроллер представления?


person chan    schedule 29.06.2018    source источник
comment
Вы устанавливаете новый RootViewController каждый раз во время навигации или просто вставляете стек?   -  person iOS Geek    schedule 29.06.2018
comment
когда VC1 переходит в VC2, нажимается контроллер навигации. Однако, когда VC1 переходит к VC3, VC3 назначается новому навигационному контроллеру (это bc, я хотел, чтобы появился вертикальный переход нового навигационного контроллера). Поэтому, когда пользователь берет VC1- ›VC3-› VC2, корневым представлением является VC3, который является первым в стеке навигации. Я совершенно не понимаю, как это решить.   -  person chan    schedule 29.06.2018


Ответы (1)


Если вы поставите appdelegate.window!.rootViewController = VC1, стек контроллеров умер, у вас в стеке только один контроллер, поэтому вы не можете применить popToRootViewController.

Если это ваша необходимая навигация, возможно, вам поможет этот пост:  введите описание изображения здесь

person Lito    schedule 29.06.2018