2015-02-09 1 views
0

У меня есть вид контроллер, который может представлять 2 навигационные контроллеры с каждый из которых имеет свой собственный стек контроллеров зрения:Переключение между UINavigationController segues в xcode6?

enter image description here

Теперь я хочу в любое время, чтобы иметь возможность переключать эти навигационные контроллеры. Я представляю их с помощью новой функциональности шоу. Например, я глубоко погружен в верхнюю иерархию навигационного контроллера, и я хочу переключиться на нижнюю. Могу ли я просто позвонить в сетевом контроллере представления

UIViewController *rootController = (UIViewController *)[UIApplication sharedApplication].keyWindow.rootViewController; 
[rootController performSegueWithIdentifier:@"sessionsNavigationController" sender:nil]; 

Будет ли держать верхний контроллер в стек и положить на него снизу, это будет заменить их?

Английский не мой родной язык, но я постараюсь предоставить дополнительную информацию, если неясно, чего я хочу.

ответ

3

Лучший способ справиться с переключением себя в AppDelegate.m

UINavigationController* firstNVC; 
UINavigationController* secondNVC; 
BOOL showingFirst; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //Store two local pointers to the Navigation Controllers you want to switch between 
    self.firstNVC = [[UIStoryboard storyboardWithName:@"main" bundle:nil] instantiateViewControllerWithIdentifier:@"firstNVC"]; 
    self.secondNVC = [[UIStoryboard storyboardWithName:@"main" bundle:nil] instantiateViewControllerWithIdentifier:@"secondNVC"]; 
    //Add yourself to listen for a notification to switch controllers 
    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(switchViews:) 
              name:@"switchViews" 
              object:nil]; 
    //Set toggle bool 
    showingFirst = TRUE; 
    //Set first view to show 
    self.window.rootViewController = self.firstNVC; 
    return YES; 
} 

- (void)switchViews:(NSNotification *)notification 
{ 
    //Swap viewcontrollers 
    if(showingFirst) 
     self.window.rootViewController = self.secondNVC; 
    else 
     self.window.rootViewController = self.firstNVC; 
    //Toggle bool 
    showingFirst = !showingFirst; 
} 

Тогда в любом месте вашего приложения, где вы хотите, чтобы переключить контроллеры просто использовать эту линию, чтобы отправить уведомление на AppDelegate

[[NSNotificationCenter defaultCenter] postNotificationName:@"switchViews" object:self userInfo:nil]; 
1

Если вы хотите, чтобы пользователь имел возможность управлять переключением, вам будет лучше всего использовать контроллер панели вкладок. Вы можете подключить каждый из контроллеров навигации к вкладке в UITabBarController. Это позволит пользователю переключаться между верхним и нижним навигационными контроллерами по желанию. Это также сохранит ваше место в стеке контроллера просмотра для каждого контроллера навигации при переключении.

Смежные вопросы