Приложение панели вкладок с контроллером навигации - PullRequest
45 голосов
/ 15 декабря 2008

У меня есть простое приложение для iPhone, которое имеет панель вкладок и 3 вкладки. Каждая вкладка загружается как отдельный кончик с соответствующим контроллером. Каждый перо содержит таблицу с некоторыми другими элементами управления для поиска / фильтрации и т. Д.

То, что я хотел бы (и, похоже, не могу найти пример), - это добавление контроллера навигации в приложение, чтобы каждый перо (т.е. каждая вкладка) могло переходить к деталям страниц.

Должен ли я добавить контроллер навигации в главное окно и создать для него IBOutlet, или следует добавить NC к перьям.

Ответы [ 8 ]

63 голосов
/ 15 декабря 2008

Если у вас есть панель вкладок в XIB, самый простой способ сделать это - перетащить объект UINavigationController из окна библиотеки (выглядит как кнопка левой навигационной панели на золотом фоне) в древовидное представление для вашей вкладки. панель (только текстовый вид, а не графический интерфейс). Поместите контроллер навигации в контроллер панели вкладок, затем перетащите существующий контроллер представления в контроллер навигации.

Когда вы перейдете к этой вкладке, вы должны увидеть панель навигации вверху ее ... если вы загружаете контроллер навигации из другой xib, вы измените панель навигации в панели вкладок xib.

27 голосов
/ 15 февраля 2012

Это как добавить NavigationController программно (например, в вашем AppDelegate)

  UIViewController  *viewController1, *viewController2;

    viewController1 = [[[UIViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
    UINavigationController *navigationcontroller = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease];

    viewController2 = [[[UIViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil];

Если у вас есть табличное представление в Viewcontroller1, вы можете получить доступ к Navigationcontroller, используя self.navigationController, например. в didSelectRowAtIndexPath чтобы открыть DetailView

например.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
}

В этом примере detailViewController включает файл NIB, который добавляет панель навигации с кнопкой возврата. Но если вы инициализируете detailViewController программно, вы можете добавить действие (GoBack) в UIBarButtonItem, чтобы удалить detailViewController из его контроллера навигации.

-(void) GoBack
{    
    [self.navigationController popViewControllerAnimated:YES];
}
13 голосов
/ 12 февраля 2010

Я понял, что уже поздно, но этот вопрос # 1 по результатам Google сегодня, и поэтому я решил добавить ответ. O'Reilly предлагает отличное видеоурок на YouTube, в котором рассказывается о приложении с вкладками + контроллером навигации. Проверьте это здесь: http://www.youtube.com/watch?v=LBnPfAtswgw

9 голосов
/ 19 апреля 2012

много ответов, но ни одного не проверено ...

Конечно, теперь все это очень просто с раскадровками в конструкторе интерфейса XCode:

создайте интересующий навигационный контроллер, затем выберите меню Editor и пункт Embed In >, а затем Tab Bar Controller.

это даже работало с навигационными контроллерами, которые Xcode представляет вам, когда вы начинаете с шаблона master / detail split-view-controller для нового проекта. в обоих случаях у меня теперь есть контроллер панели вкладок в качестве моего мастера; для iPhone он проходит сквозь все концевые контроллеры, а на iPad он удерживает вкладки только в главном (т.е. разделение справа в альбомной ориентации и всплывающее окно в портретной).

9 голосов
/ 15 декабря 2008

Способ думать об этом таков:

Вы хотите, чтобы каждая вкладка имела контроллер навигации. Затем каждый навигационный контроллер должен иметь контроллер корневого представления и загруженный Nib.

Итак, в IB добавьте контроллеры навигации для каждой из ваших вкладок. Затем настройте каждый контроллер nav на наличие соответствующего корневого контроллера представления и Nib.

6 голосов
/ 11 августа 2010
1 голос
/ 14 июля 2011

Откройте файл XIB вашего UITabBarController (из MainWindow.xib)

Перейти к «Атрибутам контроллера панели вкладок». Там вы увидите раздел «View Controllers», где будут упомянуты контроллеры представлений каждой вкладки. Просто измените тип контроллера на NavigationController для любой вкладки, которую вы хотите.

Выберите вид контроллера, который вы изменили, и проверьте опцию loadFromNib в его атрибутах, и выберите правильный наконечник. (как после изменения типа контроллера это соединение было бы потеряно)

0 голосов
/ 30 сентября 2015

Вопрос слишком старый, но SDK обновлены, и некоторым читателям может понадобиться новый ответ. Итак, теперь для пользователей раскадровки ответ на использование Tabbar и Navigation controller довольно прост.

  1. Перетащите контроллер навигации в раскадровку.
  2. Назначьте стрелку запуска новому навигационному контроллеру, сделав контроллер отправной точкой.
  3. Перетащите контроллер Tabbar и установите его с помощью вкладок и требуемого контроллера. Вы можете настроить контроллер вкладок с вкладками позже, когда захотите.
  4. Выберите контроллер навигации и свяжите его «корневой viewcontroller» с контроллером вкладок.

Это загрузит приложение с контроллерами навигации и табуляции.

...