Отключить панель вкладок для перехода к корневому представлению

У меня есть приложение на основе панели вкладок с навигацией по каждому элементу панели вкладок. Когда я перехожу к другому представлению на любом элементе панели вкладок и нажимаю на элемент панели вкладок, вызывается контроллер корневого представления для этого элемента панели вкладок. Это похоже на PopToRootView. Можем ли мы отключить эту ситуацию?


person Himanshu    schedule 13.01.2010    source источник


Ответы (4)


Да, вы можете отключить автоматический popToRootViewController, реализовав метод UITabBarControllerDelegate в вашем контроллере представления:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    if(self.navigationController == viewController) {
        return NO;
    }
    return YES;
}

Благодаря: Отключить действие - пользователь нажимает на элемент панели вкладок, чтобы перейти к корневому контроллеру представления

person Leigh McCulloch    schedule 03.04.2011

Хотя они говорят, что вы не должны создавать подкласс UINavigationController, вы можете делать все, что хотите, создав подкласс UINavigationController и переопределив метод - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;.

Выполнение этого (без вызова super popToRootViewController) предотвратит появление контроллеров представления, когда вы щелкаете элемент панели вкладок. Каким-то образом это могло вызвать у вас проблемы, но, надеюсь, это сработает для вас.

person mjdth    schedule 13.01.2010
comment
Не могли бы вы рассказать мне, что означает - (NSArray *) popToRootViewControllerAnimated: (BOOL) animated; с передачей "NO" в анимированном параметре. - person Himanshu; 15.01.2010
comment
@mjdth Вы случайно не знаете, что проблема не в том, что приложение отклоняет Apple? В остальном это работает как шарм. Спасибо за отзыв. - person Rahul Choudhary; 03.02.2012

  1. Включите UITabBarControllerDelegate в свой заголовочный файл.
  2. попробуй это:

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
      {
          if(bool_youDontWantPopToRootView)
               return (tabBarController.selectedViewController != viewController);
          return YES;
      }
    

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

person felixwcf    schedule 19.12.2012

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; когда вы передаете 'NO' в анимированном аргументе, вы будете перенаправлены в корневое представление без какой-либо анимации

вам не нужно использовать этот метод, когда вы нажимаете на любую панель вкладок, это поведение по умолчанию контроллера навигации, которое поддерживает свой собственный стек VC

person YogiAR    schedule 19.12.2012