Шаблон кода: загрузка объектов TabBarController напрямую из независимого файла .xib (вместо MainWindow.xib)

Порыскал в интернете и не нашел приемлемого решения этой проблемы...

Я ищу простой шаблон кода:

Загружайте объект TabBarController (со связанными с ним контроллерами подпредставления) из отдельного файла .xib вместо включения и автоматической загрузки из файла MainWindow.xib по умолчанию.

В терминах XCode, начиная с нового проекта iPad/iPhone в качестве «Приложения панели вкладок», цель состоит в том, чтобы решить следующее:

  • Создать проект
  • Переместите: TabBarController, TabBar, FirstViewController и SelectedSecondViewController из MainWindow.xib в новый файл «TabBarController.xib».
  • После перемещения MainWindow.xib должен содержать только: владельца файла, первого ответчика, делегата приложения, окна.
  • В TabBarController.xib владельцам файлов и первым ответчикам присвоены значения: UIApplication и UIResponder соответственно.
  • Измените «didFinishLaunchingWithOptions» в главном делегате приложения на следующее:

УДАЛИТЬ:

     [self.window addSubview:tabBarController.view];

ДОБАВЛЯТЬ:

     UITabBarController *uiTab = [[UITabBarController alloc] initWithNibName:@"TabBarController" bundle:nil]; 
     [self.window addSubview:uiTab.view];

С этими изменениями приложение создается и запускается, но когда TabBarController загружает панель вкладок, она становится «пустой» — в контроллере нет содержимого.

При просмотре в отладчике либо «инициализация» не инициализируется из данных правильно, либо что-то в файле .xib установлено неправильно.

Каково правильное решение этого? Я понимаю, что есть и другие способы сделать это, и да, они работают в других приложениях.

Однако я ищу специальное решение с использованием проекта по умолчанию, которое можно использовать в качестве общего шаблона для настройки кода iOS.

Заранее благодарю за любую помощь

  • js

person Jim    schedule 05.11.2010    source источник


Ответы (2)


Я думаю, что знаю, что вы ищете, потому что я хочу то же самое.

  1. Создайте новый пустой xib-файл в конструкторе интерфейсов.
  2. Добавьте в xib TabBarController из библиотеки.
  3. Отредактируйте все, что вам нужно, на этом контроллере панели вкладок в xib.
  4. Конечно, сохранить...

Определите, из какого контроллера представления вы хотите создать этот xib с контроллером панели вкладок. Другими словами, кто является контроллером представления, который вызовет появление этого контроллера панели вкладок. Давайте назовем этот контроллер представления ParentViewController

В этом контроллере представления создайте от IBOutlet до TabBarController.

Вернитесь к xib, сделайте идентификатор владельца файла ParentViewController и, конечно же, не забудьте подключить выход контроллера панели вкладок в владельце файла к контроллеру панели вкладок в xib. сохраните xib, и вы готовы к работе.

Когда вы хотите представить эту панель вкладок, просто решите, как вы хотите это сделать: модально, всплывающее окно или что-то еще (не внутри навигационного контроллера, потому что Apple не позволяет контроллерам панели вкладок находиться внутри навигационных контроллеров).

Когда вы решите, просто представьте выход контроллера панели вкладок так, как любой другой контроллер представления. Например:

[self presentModalViewController:self.myTabBarController animated:YES];
person Avi Shukron    schedule 18.01.2011

Предполагая, что вы начинаете с шаблона «Приложение панели вкладок» и перемещаете UITabBarController и связанные контроллеры представления в новый наконечник, как вы описали...

В вашем новом пера владелец файла должен быть установлен на ваш класс AppDelegate. Затем подключите выход «tabBarController» владельца файла к UITabBarController.

Затем в вашем -[application:didFinishLaunchingWithOptions:] не удаляйте эту строку:

[self.window addSubview:tabBarController.view];

Вместо этого загрузите новый nib прямо перед этим с вашим делегатом приложения в качестве владельца:

[[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil];

Это установит ваше свойство tabBarController (поскольку вы установили это соединение в nib), а затем вы можете продолжить как обычно. То, что вы делали, на самом деле создавало совершенно новый UITabBarController и вообще не загружало его из пера. (ну хорошо, вы загрузили его на короткое время, но затем не сделали с ним ничего полезного)

Надеюсь, это поможет.

person Firoze Lafeer    schedule 05.11.2010
comment
Это не то, чего он хотел. он хочет иметь возможность загружать контроллер панели вкладок из файла xib в любом месте приложения. например - во всплывающем контроллере. - person Avi Shukron; 17.01.2011