Как объединить TabBar + Navigation с XCode
Я собираюсь объединить приложение TabBar + Navigation.
У меня есть 5 панелей вкладок, 4 - список вещей и подробное описание.
Я пытаюсь следовать этому руководству:
http://www.iphonedevforums.com/forum/iphone-sdk-development/124-view-controller-problem.html
Но всегда получайте пустой вид.
Это то, что я делаю, с чистым проектом:
В ответ я получаю пустой экран.
Я должен добавить, что я хочу перемещаться из представлений деталей, а не из основных окон.
В панели основного окна 1 находится список людей. Я выбираю человека, затем хочу перейти к подробному окну.
Ответы
Ответ 1
Во-первых, вы никогда не хотите подклассифицировать UINavigationController или UITabBarController.
Во-вторых, я не совсем понял, что вы сделали, но правильная последовательность создания контроллера навигации внутри контроллера панели вкладок выглядит примерно так:
// in MyAppDelegate.h
UINavigationController *nc1, *nc2;
FirstTabRootViewController *vc1;
SecondTabRootViewController *vc2;
UITabBarController *tbc;
// in MyAppDelegate.m
nc1 = [[UINavigationController alloc] init];
vc1 = [[FirstTabRootViewController alloc] initWithNibName:nil bundle:nil];
vc1.tabBarItem.title = @"Tab 1";
vc1.tabBarItem.image = [UIImage imageNamed:@"tab1.png"];
vc1.navigationItem.title = "Tab 1 Data";
nc1.viewControllers = [NSArray arrayWithObjects:vc1, nil];
nc2 = [[UINavigationController alloc] init];
vc2 = [[SecondTabRootViewController alloc] initWithNibName:nil bundle:nil];
vc2.tabBarItem.title = @"Tab 2";
vc2.tabBarItem.image = [UIImage imageNamed:@"tab2.png"];
vc2.navigationItem.title = "Tab 2 Data";
nc2.viewControllers = [NSArray arrayWithObjects:vc2, nil];
tbc = [[UITabBarController alloc] init];
tbc.viewControllers = [NSArray arrayWithObjects:nc1, nc2, nil];
Обратите внимание, что это ваш контроллер просмотра, который управляет текстом/значком на панели вкладок и на панели навигации. Создайте экземпляр UINavigationController для каждой из ваших вкладок; UINavigationController содержит стек контроллеров вида (см. Свойство viewControllers), который должен содержать хотя бы один элемент - ваш корневой контроллер для этой вкладки. Также создайте UITabBarController для управления вкладками.
Конечно, вы можете (и, вероятно, должны) использовать конструктор интерфейса вместо кода для создания экземпляров указанных классов и установки свойств. Но важно, чтобы вы понимали, что происходит за кулисами; построитель интерфейсов - не что иное, как удобный способ создания и создания объектов.
Надеюсь, это полезно; уточните ваш вопрос, если это не так.
Ответ 2
Проверьте этот отличный видео-учебник
Создание приложения iPhone, объединяющего панель вкладок, навигацию и вкладку
http://www.youtube.com/watch?v=LBnPfAtswgw
Надеюсь, что эта помощь вам поможет.
Ответ 3
По-прежнему появляется пустой экран. Запуск приложения после реализации вышеуказанного кода. Где я пишу это неправильно.
nc1 = [[UINavigationController alloc] init];
nc2 = [[UINavigationController alloc] init];
vc1 = [[FirstRootViewController alloc]initWithNibName:@"FirstRootViewController" bundle:nil];
vc1.tabBarItem.title = @"Item 1";
vc1.tabBarItem.image= [UIImage imageNamed:@"home.png"];
vc1.navigationItem.title = @"Tab1 Data";
nc1.viewControllers = [NSArray arrayWithObjects:vc1,nil];
vc2 = [[SecondRootViewController alloc]initWithNibName:@"SecondRootViewController" bundle:nil];
vc2.tabBarItem.title = @"Item 2";
vc2.tabBarItem.image= [UIImage imageNamed:@"home.png"];
vc2.navigationItem.title = @"Tab2 Data";
nc2.viewControllers = [NSArray arrayWithObjects:vc2,nil];
tbc = [[UITabBarController alloc]init];
tbc.viewControllers = [NSArray arrayWithObjects:nc1,nc2,nil];
[window addSubview:tbc.view];
[window makeKeyAndVisible];
Ответ 4
Вот учебник, который я смог получить.
Я также прочитал официальную документацию по SDK по теме: Сочетание панели вкладок и контроллеров навигации. Поскольку я все еще учась, учебник помог мне больше, чем документы.
ПРИМЕЧАНИЕ. В учебнике я не думаю, что вам нужно подклассифицировать UINavigationController, и сейчас я экспериментирую с этой идеей.
Ответ 5
Я попытался создать приложение iphone с UITabBarController и некоторым UINavigationController внутри него и столкнулся с теми же проблемами, что и "mamcx". С вашим примером-кодом я заставляю его работать:) Большое спасибо.
Вот как это работает для меня.
// YOURS
fourthNavigation = [[UINavigationController alloc ] init ];
fourthViewController = [[[FourthTabRootController alloc] initWithNibName:@"FourthView" bundle:nil] autorelease];
fourthNavigation.tabBarItem.title = @"YOURS";
fourthNavigation.viewControllers = [NSArray arrayWithObjects:fourthViewController, nil];
// Add self-defined UIViewControllers to the tab bar
tabBarController.viewControllers = [NSArray arrayWithObjects:firstNavigation,secondNavigation, thirdNavigation, fourthNavigation, nil];
// Add the tab bar controller current view as a subview of the window
[window addSubview:tabBarController.view];
Другие UINavigationControllers "firstNavigation,..." создаются одинаково.
Я загружаю элементы представления из nib файлов, которые связаны с моими подклассами классов UIViewController. Вам не нужно добавлять NavigationBar в IB к вашему представлению, потому что UINavigationController имеет allready один. Поэтому вам нужно только установить заголовок в "initWithNibName"
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
self.title = @"YOURS";
}
return self;
}
Я надеюсь, что это поможет.
Ответ 6
Отметьте "Добавление контроллера навигации в интерфейс панели вкладок" в Просмотр каталога контроллера для iOS, в котором вы шаг за шагом это может быть достигнуто