Автоматическая загрузка UINavigationController из другого пера с помощью UITabBarController - PullRequest
4 голосов
/ 19 мая 2009

Мне кажется, я нашел причину: в окне «Информация о документе» в IB есть предупреждение: «Selected Navigation Controller (Second)» имеет свойство nib name, установленное в «SecondView.nib», но этот контроллер представления не предназначен для такой настройки. "

Облом.


Я построил перо в Интерфейсном Разработчике, который имеет UITabBarController на верхнем уровне и переключается между UINavigationController с.

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

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

second nib

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

// imgur has lost the image, sorry //

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

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

Ответы [ 5 ]

5 голосов
/ 20 мая 2009

Просто замените 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)

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

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

Готово.

5 голосов
/ 19 мая 2009

Я не пытался настроить UINavigationController через IB. У меня есть несколько экранов, каждый хранится в отдельном xib, и есть соответствующий класс, который расширяет UIViewController. В applicationDidFinishLaunching я инициализирую UIViewController, используя 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.

1 голос
/ 19 мая 2009

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

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

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

1 голос
/ 19 мая 2009

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

newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]];
0 голосов
/ 24 декабря 2010

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

...