SplitViewController UI макет - PullRequest
       1

SplitViewController UI макет

1 голос
/ 20 января 2011

Я пытаюсь создать пользовательский интерфейс, в котором у меня есть 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 из коробки с контроллером панели вкладок справа с двумя вкладками в нем. Вкладки работают для переключения между представлениями.

Несколько вещей, с которыми я сейчас борюсь, это:

  1. Кнопка для запуска Popover отсутствует. Нужно ли добавлять ее в каждую вкладку?
  2. Как подключить RootViewController к TabBarController, чтобы отображались сведения о выбранном элементе?

1 Ответ

0 голосов
/ 15 апреля 2011

не уверен, что вы все еще ищете ответ на этот вопрос.Я столкнулся с очень похожей проблемой с вопросом о множественных подробных видах.В конце концов, я нашел и использовал это решение с сайта разработчика Apple:

SubstitutableDetailViewController

Их решение очень просто реализовать и очень понятно.

Что касается второй части вашего вопроса, вы можете попросить представителя TabBarController проинформировать представление с левой стороны разделенного представления о том, кто является текущим подробным представлением.Затем он может использовать эту информацию для предоставления обновлений для правильного представления.

...