UISplitViewController в TabBar (UITabBarController)?

Я натурален из ситуации, что я должен запустить с основанного на вкладке приложения, и в этом мне нужно представление разделения для одной или нескольких вкладок. Но кажется, что объект контроллера представления разделения не может быть добавлен к tabbarController. (Хотя объект панели вкладок может быть добавлен к splitviewcontroller).

Проблема видна otherways: у Меня есть полный экран в левой первой части, имеют табличное представление, когда любая строка выбрана в таблице, легкая сдоба должна выйти, указав на ту строку. Теперь, когда любая строка в легкой сдобе выбрана, строки в этой легкой сдобе прибывают налево под выбранной строкой (только эта строка была бы видима), и другая легкая сдоба прибывает из выбранной строки. (Тип навигации навигационной цепочки)

Я думаю, что я ясен в том, что я объяснил. Так парни какие-либо идеи или работа arounds?

Сообщите мне, не ли я ясен в своем вопросе.

Спасибо,

Madhup

28
задан Georg Fritzsche 10 September 2010 в 08:18
поделиться

6 ответов

Я сделал пример приложения. и обнаружил, что мы можем сделать это программно, например:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        NSMutableArray *array = [NSMutableArray array];

        NSMutableArray *tabArray = [NSMutableArray array]; 

        UISplitViewController *splitViewConntroller = [[UISplitViewController alloc] init];

        MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];




        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        array = [NSMutableArray array];

        splitViewConntroller = [[UISplitViewController alloc] init];

        viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        // Add the tab bar controller's current view as a subview of the window
        [tabBarController setViewControllers:tabArray];

        [window addSubview:tabBarController.view];
        [window makeKeyAndVisible];

        return YES;
    }

Надеюсь, это поможет.

7
ответ дан 28 November 2019 в 03:28
поделиться

Чтобы позволить tabbarcontroller отображается как главное представление для splitviewcontroller, вам следует переписать tabbarcontroller так, чтобы он поддерживал или ориентации (скажем, используя категорию для класса UITabBarController)

2
ответ дан 28 November 2019 в 03:28
поделиться

Используя построитель интерфейса, создайте контроллер разделенного представления и контроллер панели вкладок и свяжите их со своими выходами:

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;

В делегате приложения didFinishLaunchingWithOption назначьте контроллер разделенного представления контроллеру панели вкладок. :

splitViewController.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Title" image:nil tag:0] autorelease];
NSArray *controllers = [NSArray arrayWithObjects:splitViewController,  /* other controllers go here */ nil];
tabBarController.viewControllers = controllers;
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

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

19
ответ дан 28 November 2019 в 03:28
поделиться

См. Мой пост о модернизации контроллеров разделения представления на существующий интерфейс панели вкладок: http://markivsblog.blogspot.com/2010/04/ дооснащение-ipad-uisplitviewcontroller.html

2
ответ дан 28 November 2019 в 03:28
поделиться

Имейте в виду, что OS 3.2 не обеспечивает надлежащую поддержку для разделения просмотра в качестве представления панели вкладок.

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

Я пришел к выводу, что из-за этой проблемы мне нужно создать собственное splitview для использования в tabBarController.

До меня доходили слухи, что Apple работает над исправлением, но прошли месяцы, а никаких обновлений операционной системы iPad не происходило - возможно, OS 4 для iPad решит эту проблему.

1
ответ дан 28 November 2019 в 03:28
поделиться

Вы можете использовать IB для создания tabtab и модификации вкладок в splitviewcontroller.

-(void) makeSplitViewController {
NSMutableArray *controllers = [NSMutableArray arrayWithArray:tabBarController.viewControllers];
int index = 0;

for (UIViewController *controller in tabBarController.viewControllers) {
    if ([controller.tabBarItem.title isEqualToString:@"Stock"]) {
        stockDetailController = [[StockDetailController alloc] initWithNibName:@"StockDetailController" bundle:nil];

        stockMasterController = [[StockMasterController alloc] initWithStyle:UITableViewStylePlain]; 
        stockMasterController.navigationItem.title = date;
        stockMasterController.stockDetailController = stockDetailController;

        UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:stockMasterController] autorelease];

        splitViewController = [[UISplitViewController alloc] init];
        splitViewController.tabBarItem = controller.tabBarItem;
        splitViewController.viewControllers = [NSArray arrayWithObjects:nav, stockDetailController, nil];
        splitViewController.delegate = stockDetailController;

        [controllers replaceObjectAtIndex:index withObject:splitViewController];
    }

    index++;
}

tabBarController.viewControllers = controllers;

}

0
ответ дан 28 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: