2016-11-09 2 views
0

У меня есть приложение на основе табуляции. И мне интересно, можно ли его отключить от любого места до корня текущей вкладки.Swift ios развернуть корневую вкладку ViewController из любого места

Мое приложение построено так: TabController -> (вкладки) -> navigationController -> VC и т.д ..

Так позволяет сказать, что я нажимаю на вкладке 4 в моем приложении. Теперь я копаю два контроллера просмотра и заканчиваю в модальном представленном VC. Теперь я хочу вернуться прямо к корню вкладки:

Вкладка 4 -> navigationController ->rootVC ->pushVC ->pushVC ->modalVc

Так что я, например, от modalVc к rootVC

Я знаю, что я могу сделать что-то вроде this, но я хочу, чтобы перейти к rootVC из любого VC в закладки 4, и использование этой техники заставило бы меня создать разворот на всех моих дочерних VC на вкладке 4

Я использую уведомления, и когда пользователь нажимает на уведомление, я хочу, чтобы пользователь в rootVC из любого места ,

И используя что-то вроде:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let destinationViewController = storyboard.instantiateViewController(withIdentifier: "accountVc") as? AccountViewController 
         navInTab.pushViewController(destinationViewController!, animated: false) 

Не работает, например: ВХ -> ВХ -> modalVc

, так как он будет испортит navigationstack

+0

Что именно вы хотите достичь? –

+0

@Joe, которое не работает с модальным VC для меня – user2636197

ответ

0

Вы можете выскочить к корню навигационного стека или поп в n-й элемент в стеке или заменить стек контроллеров представления на другой стек.

Вы можете использовать popToRootViewController на navigationController, чтобы вернуться к самому корню стека навигации. Или предположим, что вы хотите, чтобы вернуться к первому VC в стеке, например, вы могли бы сделать что-то вроде

let controllerStack = self.navigationController?.viewControllers 
_ = self.navigationController?.popToViewController((controllerStack?[0])!, animated: true) 

Или вы можете заменить навигационный стек контроллера просмотреть с новой стопкой контроллеров т.е.

NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers]; 
// Replace the source controller with the destination controller, wherever the source may be 
[controllerStack replaceObjectAtIndex:[controllerStack indexOfObject:sourceViewController] withObject:destinationController]; 

// Assign the updated stack with animation 
[navigationController setViewControllers:controllerStack animated:YES]; 
+0

Пытаясь использовать свой первый пример, я получаю сообщение об ошибке: Неуравновешенные вызовы для перехода на начало/конец для приложения – user2636197

+0

И не могли бы вы дать быстрый пример второго? – user2636197