Нажмите TabBarController для просмотра - PullRequest
1 голос
/ 27 января 2011

Как я могу поместить TabBarController в представление?

Приложение основано на представлении.В приложении у меня есть XIB с TabBarController, и я хочу нажать TabBar на дисплей.Я сделал все, и теперь я не знаю, что я делаю неправильно.

Вот код, который должен нажать TabBarController:

- (void)showTabBar {
TabBar *tbc = [[TabBar alloc] initWithNibName:@"TabBar" bundle:nil];
[self presentModalViewController:tbc animated:YES];
[tbc release];
}

В этот момент естьпустое представление в XIB.Таким образом, дисплей белый, когда я запускаю этот код.Есть также TabBarController, который я хочу видеть на дисплее.

Спасибо за вашу помощь.


ОБНОВЛЕНИЕ:

IСледует сказать, что это два разных класса.Класс, на котором основана функция "showTabBar", должен выдвигать TabBarController.Второй класс - TabBar.TabBar является делегатом TabBarController.

Поэтому я изменил ответ следующим образом, но я попробовал оба варианта:

[self presentModalViewController:tbc.tabBarController.view animated:YES];

Ошибка теперь выглядит так:

Incompatible Objective-C types 'struct UIView *', expected 'struct UIViewController *' when passing argument 1 of 'presentModalViewController:animated:' from distinct Objective-C type

ОБНОВЛЕНИЕ:

Эй, ошибка исчезла.Здорово.;)

Но приложение заканчивается.Я видел такое поведение раньше, но я не знал, что делать.Консоль отладчика говорит следующее:

2011-01-27 15:49:32.629 Touch[3657:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <StartUp: 0x9300f20>.'

1 Ответ

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

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

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html

Это означает, что это «не разрешено», и Apple может или может в будущем отклонить вашу заявку. UITabBarController предназначен для добавления к корневому представлению (окну) в вашем делегате приложения. Если вы хотите, чтобы панель вкладок появлялась позже, вам нужно использовать UIToolBar, например, с. uisegmentedcontrol или кнопки панели инструментов.

Даже если некоторые приложения это делают (например, приложение Wordpress), вы позже обнаружите, что столкнетесь с некоторыми проблемами в консоли при модальном представлении контроллеров представления (будет выдано предупреждение).

...