Я пытаюсь создать пользовательский интерфейс, в котором у меня есть SplitView с областью Details, содержащей TabBarController. TabBarController покажет 3 различных типа детализации для элемента, выбранного в RootViewController SplitView.
Пока у меня есть TabBar, показывающий SPlitView, выполнив следующее:
1) Создано новое приложение на основе SplitView.
2) Создано новое приложение на основе TabBar
3) Скопируйте файлы .xib, .h и .m для контроллеров FirstView и SecondView из приложения TabBar в приложение SplitView.
4) В файл заголовка делегата приложения добавлено следующее:
@class RootViewController;
@class DetailViewController;
@class FirstViewController;
@class SecondViewController;
@interface SplitViewTemplateAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UISplitViewController *splitViewController;
UITabBarController *tabBarController;
RootViewController *rootViewController;
DetailViewController *detailViewController;
FirstViewController *firstViewController;
SecondViewController *secondViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;
@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet FirstViewController *firstViewController;
@property (nonatomic, retain) IBOutlet SecondViewController *secondViewController;
5) Открыл MainWindow.xib в IB и изменил класс в DetailsView на UITabController
6) Добавлен следующий код в мой файл модуля делегата приложения:
#import "FirstViewController.h"
@synthesize window, splitViewController, rootViewController, detailViewController, tabBarController, firstViewController, secondViewController;
-(void) makeTabBarController {
NSMutableArray *controllers = [NSMutableArray arrayWithArray:splitViewController.viewControllers];
int index = 0;
for (UIViewController *controller in splitViewController.viewControllers) {
if (index == 1) {
//NSLog(@"Index is: %@", index);
//NSLog(@"Controller name is: %@", controller.title);
UINavigationController *localNavController;
tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:2];
firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil];
localNavController = [[UINavigationController alloc] initWithRootViewController:firstViewController];
localNavController.tabBarItem.title = @"First Tab";
[firstViewController release];
[localViewControllersArray addObject:localNavController];
[localNavController release]; // Retained by above array
secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];
localNavController = [[UINavigationController alloc] initWithRootViewController:secondViewController];
localNavController.tabBarItem.title = @"Second Tab";
[secondViewController release];
[localViewControllersArray addObject:localNavController];
[localNavController release]; // Retained by above array
tabBarController.viewControllers = localViewControllersArray;
[localViewControllersArray release]; // Retained thru above setter
//tabBarController.delegate = splitViewController;
[controllers replaceObjectAtIndex:index withObject:tabBarController];
}
index++;
}
splitViewController.viewControllers = controllers;
}
7) Добавлено следующее в метод didFinishLaunchingWithOptions;
[self makeTabBarController];
Так что теперь я получаю из SplitView из коробки с контроллером панели вкладок справа с двумя вкладками в нем. Вкладки работают для переключения между представлениями.
Несколько вещей, с которыми я сейчас борюсь, это:
- Кнопка для запуска Popover отсутствует. Нужно ли добавлять ее в каждую вкладку?
- Как подключить RootViewController к TabBarController, чтобы отображались сведения о выбранном элементе?