2011-01-27 3 views
1

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

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

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

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

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

Благодарим за помощь.


UPDATE:

Я должен сказать, что это два разных класса. Класс, на котором основана функция «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 

UPDATE:

Эй, ошибка исчезла. Круто. ;)

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

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>.' 

ответ

2

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

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

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

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

+0

Хорошо, это означает, что мне нужно построить TabBar самостоятельно без TabBarController? – teawithfruit

+0

Насколько я знаю, да.Я сделал ту же «ошибку» с одним приложением, которое я сделал, потому что компилятор не скажет вам, что нажатие UITabBarController неверно, поэтому я подумал, что все в порядке, пока я не получил помощь и не прочитал документацию (это приводит к другим проблемам из-за неявное отношение iOS настраивается для вас с помощью parentViewController, tabBarController, navigationController). Я сделал UIToolBar и добавил UISegmentedControl, в котором я сосредоточился. Однако я мог бы использовать UIToolBarItem как -ую, которая даст вам почти такой же эффект. Однако логика выталкивания/выскакивания просмотров теряется. – LuckyLuke

+0

Вы бы использовали обычный вид, чтобы заполнить его всеми материалами TabBar, которые вам нужны для создания TabBar? – teawithfruit

Смежные вопросы