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

StackOverflow https://stackoverflow.com/questions/883510

  •  22-08-2019
  •  | 
  •  

Вопрос

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

Облом.


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

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

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

second nib

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

// imgur has lost the image, sorry //

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

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

Это было полезно?

Решение

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

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

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

Сделанный.

Другие советы

Я не пробовал настраивать 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.

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

newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]];

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top