iPhone: TabBarController как второй уровень контроллера навигации - PullRequest
0 голосов
/ 14 мая 2010

Я новичок в разработке для iPhone.

Я прочитал учебники по реализации контроллера панели вкладок в окне (например, в качестве основного контроллера для приложения). Но как я могу создать контроллер панели вкладок как «автономный» UIViewController, который может вызываться контроллером панели навигации?

В основном мой контроллер панели навигации имеет массив UIViewControllers, которые он отображает в таблице, а затем загружает соответствующий вид / контроллер, когда пользователь выбирает элемент.

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

Я не уверен, как создать контроллер панели вкладок сам по себе, не имея розетки / экземпляра в делегате приложения.

Надеюсь, это имело смысл. Благодарю.

Ответы [ 2 ]

3 голосов
/ 16 мая 2010

Хотя предыдущий ответ был верным, я просто хотел бы отметить, что Apple не будет доволен этим:

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

Цитата из: Руководство по программированию контроллера Apple View

Прочтите Руководство по интерфейсу пользователя, ваше приложение может быть отклонено за "нарушение правил интерфейса". Более того, вам также придется обрабатывать все vieWillAppear / Disappear и т. Д. Вручную. Я почти уверен, что есть другой способ разработки интерфейса.

С уважением, Пол

0 голосов
/ 14 мая 2010

У вас есть два варианта.

Во-первых. Создайте UITabBarController (общие ресурсы alloc-init) и отправьте его в UINavigationController.

Во-вторых. Вы можете создать собственный UIViewController и разместить там UITabBar. После этого вы можете настроить его и вставить этот пользовательский UIViewController в контроллер навигации. Код будет выглядеть так:

UITabBar *tabBar = [[UITabBar alloc] initWithFrame:
    CGRectMake(0, self.view.frame.size.height - 49, 320, 49)];
tabBar.autoresizingMask = 
    UIViewAutoresizingFlexibleTopMargin | 
    UIViewAutoresizingFlexibleWidth;
[self.view addSubview:tabBar];

Вы можете использовать подобный код, например, в методе viewDidLoad UIViewController. Чтобы обработать событие изменения вкладки, вам нужно реализовать протокол UITabBarDelegate и назначить его (например, самому UIViewController):

tabBar.delegate = self;

После этого вам придется реализовать

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

метод, который поможет вам ловить события.

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