Автоматическая загрузка UINavigationController из другого пера с помощью UITabBarController

Я думаю, что нашел причину: в окне «Информация о документе» в IB есть предупреждение: «Выбранный контроллер навигации (второй)» имеет свойство имени пера, установленное на «SecondView.nib», но этот контроллер представления не предназначен для установить его представление таким образом."

облом.


Я создал nib в Interface Builder, который имеет UITabBarController на верхнем уровне и переключается между UINavigationControllers.

Он отлично работает, когда все находится в одном файле nib, но я бы хотел использовать отдельные файлы nib для UINavigationControllers.

Начиная с шаблона Apple TabBar, если я просто изменю класс SecondView на UINavigationController, все сломается:

второй наконечник

и все, что я получаю, это:

// imgur has lost the image, sorry //

Можно ли иметь отдельный файл для UINavigationController без программной настройки всего?

Я хотел бы, чтобы TabBarController обрабатывал загрузку и выгрузку перьев.


person Kornel    schedule 19.05.2009    source источник
comment
Эй, здесь вместо скриншотов личные фотографии. Не могли бы вы исправить? :)   -  person Anton Chikin    schedule 10.12.2012


Ответы (5)


Просто замените UINavigationController на FirstViewController.

Итак, иерархия должна быть такой:

Tab bar controller
-----Tab bar
-----Navigation Controller
----------First View Controller
---------------Navigation Item
----------Tab bar item (First)
-----Navigation Controller
----------Second View Controller
---------------Navigation Item
----------Tab bar item (Second)

Вы устанавливаете перо первого контроллера просмотра в инспекторе на файл пера, содержащий фактические объекты просмотра (поскольку вы пытаетесь разделить их на отдельные файлы, что хорошо).

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

Сделанный.

person Corey Floyd    schedule 19.05.2009

Я не пробовал настроить UINavigationController через IB. У меня есть несколько экранов, каждый из которых хранится в отдельном xib, и есть соответствующий класс, расширяющий UIViewController. В applicationDidFinishLaunching я инициализирую UIViewControllers с помощью xib, но затем вручную создаю UINavigationController, добавляю представление навигационного контроллера в окно и отправляю первое представление в навигационный контроллер.

Не уверен, что это поможет.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    navigationController = [[UINavigationController alloc] init];

    FirstViewController * viewController = [[FirstViewController alloc] 
                                           initWithNibName:@"FirstView"
                                                    bundle:nil];
    [navigationController pushViewController:viewController animated:NO];
    [viewController release];
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
}

Выше FirstViewController расширяет UIViewController, в IB вы создаете свое представление, затем устанавливаете класс владельца файла в свой класс (например, здесь FirstViewController) и подключаете представление владельца файла к представлению UIView.

person stefanB    schedule 19.05.2009

Я считаю, что вы ищете что-то вроде этого. Вы бы заменили «что угодно» на имя вашего второго файла пера.

newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]];
person Joe Cannatti    schedule 19.05.2009
comment
Я хотел бы избежать загрузки, инициализации и выпуска перьев программно. UITabBarController делает это автоматически (по крайней мере, для простых UIViewController...) - person Kornel; 19.05.2009

Во-первых, похоже, что у вас есть UITabBarItems под контроллерами навигации, а не непосредственно под UITabBarController. Это может быть частью вашей проблемы.

Во-вторых, когда вы добавляете UITabBarController в IB и нажимаете на его значок в списке объектов верхнего уровня (ваш первый снимок экрана), инспектор атрибутов позволит вам изменить тип контроллера представления для каждой из вкладок. Используя это, вы можете изменить их все на навигационные контроллеры, если хотите. Кроме того, поскольку вы хотели загрузить пользовательские представления и контроллеры представлений из других наконечников, если вы посмотрите на раздел «Контроллер представления» в нижней части инспектора атрибутов, вы можете выбрать наконечник из своего проекта для загрузки представления. Предполагая, что «Владелец файла» nib установлен на ваш подкласс UINavigationController, все должно работать нормально.

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

person Marc W    schedule 19.05.2009
comment
Я не могу перемещать UITabBarItems непосредственно под UITabBarController — это создает новые контроллеры в IB. Я исправил типы контроллеров в инспекторе UITabViews, и это вызвало предупреждение в IB, в котором говорится, что это не сработает :( - person Kornel; 19.05.2009

Я нашел то же предупреждение. Я сохранил все контроллеры просмотра в отдельных файлах xib. Я избавился от него, удалив имя .nib и оставив его пустым.

person saurabh    schedule 24.12.2010