Панель вкладок в приложении на основе навигации (снова) - PullRequest
1 голос
/ 05 октября 2009

Вот моя проблема:

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

У меня уже работает приложение на основе навигации. У меня есть несколько nib-файлов (представлений), каждый со своим собственным контроллером представлений, которые я программно помещаю в стек контроллера навигации. Мне нужно одно из этих представлений, чтобы иметь панель вкладок, которая позволяет мне переключаться между некоторыми другими. Я понимаю, как работает панель вкладок, и я думаю, что мне нужно использовать контроллер панели вкладок, так как это позволило бы мне определить контроллеры представления, связанные с каждым элементом панели вкладок, и управлять всем о них. Однако я не вижу, как это сделать.

Если я объявлю контроллер панели вкладок в моем "tabBarViewController", нарисую контроллер панели вкладок в моем "tabBarView" и свяжу их с IB, это даст мне ошибку (я думаю, это потому, что я не действительно выдвинул представление контроллера панели вкладок? мне нужно что-то эквивалентное "[window addSubView: [tabbarcontroller view]]?".) В этом случае все, что мне нужно знать, это как "увидеть" вид контроллера контроллера вида сверху панели вкладок в контроллере вида я уже нажал.

Если я пытаюсь не использовать контроллер панели вкладок, так как я прочитал, это лучшее решение этой проблемы, ¿как мне управлять элементами панели вкладок, переключениями между ними и т. Д.?

Буду очень признателен за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 06 октября 2009

Вы можете сделать это с небольшим количеством кода, например:

FooViewController *foo = [[FooViewController alloc] init];
BarViewController *bar = [[BarViewController alloc] init];

UITabBarController *tabby = [[UITabBarController alloc] init];
[tabby setViewControllers:[NSArray arrayWithObjects:foo, bar, nil] animated:NO];
[self.navigationController pushViewController:tabby animated:YES];
[foo release];
[bar release];
[tabby release];

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

Я создал пример проекта, который демонстрирует это в действии, вы можете скачать его с http://s3.thismoment.com/navtab.zip

0 голосов
/ 15 августа 2011

Я только что сделал приложение с контроллером tabBar и 5 navControllers. Все, что вам нужно сделать, это загрузить перья и контроллер навигации внутри первого элемента контроллера tabBar. Вы можете скрыть панель вкладок, даже если виды внутри нее, и заставить ее отображаться в нужном вам виде.

0 голосов
/ 05 октября 2009

Вы не можете поместить контроллер панели вкладок в стек контроллера навигации. Просто нет поддерживаемых способов сделать это.

Вместо этого вы можете рассмотреть создание собственного экземпляра UITabBar, а затем использовать делегата, соответствующего UITabBarDelegate. Таким образом, ваш делегат будет получать сообщение tabBar:didSelectItem: всякий раз, когда пользователь выбирает элемент панели вкладок. Вам придется самостоятельно управлять NSArray items для бара без использования IB.

Как только вы разобрались, все, что осталось сделать, это вставить обычный UIViewController в ваш стек навигации, как и любой другой, и просто заставить этот контроллер управлять панелью вкладок и делегировать.

...