Как добавить TabBar в приложение для iPhone на основе NavigationController - PullRequest
11 голосов
/ 27 января 2009

У меня есть простое приложение на основе NavigationController. В главном окне отображается TableView, а при выборе элемента загружается подвид. Я использовал Interface Builder для представлений пользовательского интерфейса.

Теперь я хочу добавить TabBar в приложение. Куда я это положу? Нужен ли TabBarController? Должен ли он идти в MainWindow.xib или RootViewController.xib?

Как связать его с моим NavigationController?

Ответы [ 6 ]

8 голосов
/ 13 июня 2010

Ответ окончательный на этот вопрос представлен в документации iPhone SDK в Руководстве по программированию контроллера представления для iPhone .

Руководство по программированию контроллера представления: Объединение контроллеров представления

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

4 голосов
/ 29 января 2009

Я делаю это в нескольких своих приложениях. Хитрость в добавлении панели вкладок в приложение, основанное на навигационном контроллере, состоит в том, чтобы НЕ использовать TabBarController. Добавьте панель вкладок к представлению, сделайте контроллер представления для этого представления TabBarDelegate и ответьте на выбор пользователя на панели вкладок в коде контроллера представления.

Я использую панели вкладок для добавления дополнительных представлений к представлению панели вкладок в качестве вложенных представлений, для перезагрузки представления таблицы с различными наборами данных, для перезагрузки UIPickerView и т. Д.

2 голосов
/ 16 марта 2009

Вы можете использовать Interface Builder для редактирования MainWindow.xib и добавления контроллера панели вкладок в ваш контроллер навигации. Вы также можете изменить контроллеры представления UITabBarController на View / Navigation / Table View / Image Picker Controllers с помощью окна инспектора IB. Это будет работать.

Однако я не советую помещать контроллер панели вкладок в контроллер навигации. Отношения между этими контроллерами запутаются, если вы пойдете дальше (сделайте это более сложным).

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

2 голосов
/ 27 января 2009

Лучше по возможности встроить панель навигации в приложение с вкладками. Выполнение этого другим способом создает некоторые сложности, затруднено при использовании IB и приводит к большим проблемам.

2 голосов
/ 27 января 2009

Простой ответ - сделать это приложением панели вкладок, которое загружает контроллеры навигации.

Панель вкладок будет вашим компонентом самого высокого уровня, тогда вы можете загружать контроллеры навигации для каждой вкладки. Оттуда это должно быть довольно стандартным материалом. Я должен был изучить этот трудный путь некоторое время назад.

Вы можете начать с базового шаблона приложения панели вкладок в XCode, он должен настроить базовую панель вкладок с 2 простыми представлениями.

2 голосов
/ 27 января 2009

Взгляните на пример кода UICatalog. В нем много замечательных вещей, в том числе переход от одного вида к другому.

В вашем случае вам нужно использовать метод делегата UITableView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

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

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