Как добавить панель вкладок в существующий контроллер представления без XIB

Я стараюсь максимально избегать использования Interface Builder.

На данный момент у меня есть контроллер представления, созданный с помощью кода, и изменение представлений также с помощью кода.

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

В идеале я бы сказал текущему контроллеру представления добавить панель вкладок внизу, но я не уверен, что это выполнимо, поэтому мне, возможно, придется поменять местами UIViewController с UITabBarController?

Любая помощь будет оценена.

Привет, Андре


person Andre    schedule 22.03.2010    source источник


Ответы (1)


У меня нет под рукой Xcode, поэтому я постараюсь ответить устно.

Создайте новый UITabBarController и установите текущее представление как root view, затем добавьте столько вкладок, сколько хотите (каждая вкладка имеет свое собственное представление).

ОБНОВЛЕНИЕ
После инициализации контроллера определите массив представлений (порядок добавления важен). И вызовите это на контроллере панели вкладок

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

ОБНОВЛЕНИЕ 2

Вот простой код для создания панели вкладок с двумя пустыми представлениями, каждое из которых имеет собственную кнопку вкладок.

tabBarController = [[UITabBarController alloc]init];

firstView = [[FirstView alloc] init];
UITabBarItem *item1 = [[[UITabBarItem alloc]initWithTitle:@"First" image:nil tag:1] autorelease];
[firstView setTabBarItem:item1];

secondView = [[SecondView alloc] init];
UITabBarItem *item2 = [[[UITabBarItem alloc]initWithTitle:@"Sec" image:nil tag:1] autorelease];
[secondView setTabBarItem:item2];

[tabBarController setViewControllers:[NSArray arrayWithObjects:firstView,secondView,nil] animated:NO];

[window addSubview:tabBarController.view];

Конечно, этот код не будет полезен как есть, вам нужно будет создавать представления вручную или создавать nib-файл для каждого представления и загружать его в initWithNibName.

ОБНОВЛЕНИЕ 3
Проверьте это Стэнфордский курс iPhone, это бесплатный курс от Стэнфордского университета. лекторы — сотрудники Apple. Лекция 7, озаглавленная Контроллеры навигации и панели вкладок, поможет вам начать работу с этими компонентами.

person medopal    schedule 22.03.2010
comment
Спасибо :) Я добавил его в вид, он появляется с пустым холстом и пустой полосой внизу. Теперь я пытаюсь понять, как указать панели вкладок отображать определенный вид на белом холсте и как добавить 4 кнопки на пустую панель вкладок внизу. - person Andre; 22.03.2010
comment
Я добавил свой конкретный вид на белый холст. Я использую: tabBarController = [[UITabBarController alloc] init]; [tabBarController setViewControllers: [NSArray arrayWithObjects: viewController, ноль]]; viewController.view = шаг3; где step3 — это представление, которое я хотел показать. Теперь я просто пытаюсь добавить фактические кнопки вкладок и связать действия для изменения представлений. - person Andre; 22.03.2010
comment
правильно, у меня есть кнопки. есть идеи, как заставить каждую кнопку вызывать функцию для изменения представления? :) ваше здоровье - person Andre; 22.03.2010
comment
я добавил кнопки, используя: UINavigationController *tab = [[UINavigationController alloc] initWithRootViewController:viewController]; вставляя это в массив, а затем устанавливая tabBarController.viewControllers с этим массивом. Дело в том, что он автоматически добавляет панель навигации вверху. Это потому, что я использую UINavigationController для создания кнопок для панели вкладок? Как я могу манипулировать этой панелью навигации? Использование tabBarController.navigationController.navigationBar не работает :( - person Andre; 22.03.2010
comment
наконец-то нашел. теперь просто нужно связать кнопки с действиями :) есть мысли? - person Andre; 22.03.2010
comment
до сих пор не знаю, как отследить изменение табуляции, но в остальном спасибо :D - person Andre; 22.03.2010
comment
Я не уверен, что смогу помочь дальше, все должно работать сразу, в любом случае, проверьте последнее обновление, я добавил ссылку на лекцию, которая может помочь - person medopal; 22.03.2010