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

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

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

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

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

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

REMOVE:

     [self.window addSubview:tabBarController.view];

ADD:

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

С этими изменениями приложение собирается и запускается, но когда TabBarController загружает панель вкладок "пусто" - в контроллере, похоже, нет никакого содержимого.

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

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

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

Заранее спасибо за любую помощь

  • JS

Ответы [ 2 ]

2 голосов
/ 18 января 2011

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

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

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

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

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

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

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

[self presentModalViewController:self.myTabBarController animated:YES];
1 голос
/ 05 ноября 2010

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

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

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

[self.window addSubview:tabBarController.view];

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

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

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

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

...