Создание TabBarControllerDelegate в раскадровке - PullRequest
4 голосов
/ 05 января 2012

Мне трудно создать UITabBarControllerDelegate в моем приложении iOS5, управляемом раскадровкой. Вот ситуация:

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

(Если поможет, снимок экрана с соответствующим разделом раскадровки: здесь .)

Когда пользователь переключает вкладки, я всегда хочу, чтобы его перенаправили в Root View Controller для этого конкретного контроллера навигации, а не в последний раз посещаемый View Controller (это поведение по умолчанию).

Я понимаю, что для этого мне нужно вызвать popToRootViewControllerAnimated, когда вкладка нажата, как обсуждено здесь и здесь , но я не могу понять, как это сделать в раскадровка. Как я могу сделать это, не сдав раскадровку и не начав заново?

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 апреля 2012

Вы можете создать свой собственный TabBarController, реализовать метод, который создает экземпляры ваших контроллеров представления

-(UIViewController*) viewControllerWithTabTitle:(NSString*) title 
                                    viewController(NSString *)viewController {

UIViewController* returnViewController = [self.storyboard 
                             instantiateViewControllerWithIdentifier:viewController];

  return returnViewController;
}

Затем в методе viewDidLoad вы создаете массив с контроллерами представления, который в вашем случае будет идентификатором NavigationController.что вы установили на InterfaceBuilder.

- (void)viewDidLoad {

  self.viewControllers=
[NSArray arrayWithObjects:
 [self viewControllerWithTabTitle:@"Option 1" viewController:@"viewController1"],
 [self viewControllerWithTabTitle:@"Option 2" viewController:@"viewController2"],
 [self viewControllerWithTabTitle:@"Option 3" viewController:@"viewController3"],
 [self viewControllerWithTabTitle:@"Option 4" viewController:@"viewController4"],
 [self viewControllerWithTabTitle:@"Option 5" viewController:@"viewController5"], nil];

 }
1 голос
/ 04 марта 2012

Существует более одного решения вашей проблемы (это вопрос решения по шаблону).Некоторые из них могут быть:

  1. Подкласс UITabBarController и установить его в качестве пользовательского класса панели вкладок в раскадровке (также подключить делегат к вашему объекту для обработки) и переопределить -tabBarController: didSelectViewController: метод делегата

  2. Откройте корень, вызвав -popToRootViewControllerAnimated из события viewWillDisappear каждого представления, для которого вы хотите этореализованное поведение

...