Добавить UITabBarController НЕ из приложения Delegate? - PullRequest
2 голосов
/ 20 июля 2011

Это только я или буквально ВСЕ примеры, которые я видел в сети для uitabbarcontroller, требующие изменения appDelegate?Что, если в приложении появится панель вкладок и появятся другие экраны?Может кто-нибудь объяснить это или указать на пример, где первый экран приложения НЕ является представлением панели вкладок?Я схожу с ума от этого и, кажется, не могу иметь панель вкладок для работы, если не из AppDelegate.

Спасибо !!!

ОБНОВЛЕНИЕ:

Так чтоЯ делаю это в одном из моих контроллеров представления в методе, который срабатывает, когда вы нажимаете на кнопку, чтобы перейти к следующему экрану (который является представлением панели вкладок).Вылетает во время выполнения:

  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
UIViewController *viewController2 = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; //CRASHES HERE
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];

Есть идеи почему?Спасибо !!

В этой строке вылетает:

self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; //CRASHES HERE

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

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

Чтобы преодолеть эту проблему с панелью навигации, необходимо скрытьПанель навигации текущего контроллера навигации от контроллера представления, в который вы нажимаете контроллер панели вкладок.Скройте панель навигации в viewWillDisappear: метод текущего контроллера представления.

- (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}
1 голос
/ 20 июля 2011

Поскольку класс UITabBarController наследуется от класса UIViewController, контроллеры панели вкладок имеют свое собственное представление, доступное через свойство view. При развертывании интерфейса панели вкладок вы должны установить это представление как корневой каталог вашего окна. В отличие от других контроллеров представления, интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITabBarController_Class/Reference/Reference.html

1 голос
/ 20 июля 2011

Хорошо, мы идем. Предположим, что mainWindow.xib имеет один UINavigationController и один TabBarController. Первые несколько экранов разрабатываются с помощью контроллера навигации позже, в какой-то момент, когда вам нужен tabBarController. Вам нужно просто удалить представление navigationController из mainWindow и добавить представление tabBarController как подпредставление для окна. Я надеюсь, что вы понимаете, если не дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...