Должен ли UISplitViewController быть корневым контроллером приложения для iPad? - PullRequest
3 голосов
/ 22 февраля 2010

Согласно документации Apple на UISplitViewController (в новом iPad 3.2 SDK), похоже, они намереваются использовать его только в качестве корневого контроллера приложения. Другими словами ... он выглядит так, как будто вы не можете вставить UISplitViewController в UINavigationController, потому что очевидно, что UINavigationController должен будет содержать разделенное представление.

Может ли кто-нибудь подтвердить, является ли это истинным ограничением UISplitViewController? Я надеялся использовать разделенное представление в своем приложении на несколько уровней в моей иерархии UINavigationController, но похоже, что я не смогу сделать это, если не будет способа.

Спасибо!

Ответы [ 5 ]

5 голосов
/ 05 апреля 2010

Мое приложение падает, когда я пытаюсь представить UISplitViewController модально.

2 голосов
/ 03 ноября 2011

Это старый пост, но я нашел полезным помочь мне думать по-другому, и именно так я решил проблему.

Я создал splitViewController программно. Затем я пометил его номером и просто добавил в качестве подпредставления к моему текущему виду.


FirstViewController* firstView = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];    
SecondViewController* secondView = [[[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil] autorelease];        
UISplitViewController* splitVC = [[UISplitViewController alloc] init];
[splitVC setDelegate:secondView];    
splitVC.viewControllers = [NSArray arrayWithObjects:firstView, secondView, nil];    
splitVC.view.tag = 99;    
[self.view addSubview:splitVC.view];

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

NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter];
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil];

в селекторе "removeSplitView" я помещаю все подпредставления моего текущего представления в цикл for, ищу объект класса UIView с тегом 99 и удаляю его из суперпредставления.

NSArray *subviews = [self.view subviews];

for (int i = 0; i < [subviews count]; i++) {
    if ([[subviews objectAtIndex:i] isKindOfClass:[UIView class]]) {
        UIView *tempView = [subviews objectAtIndex:i];
        if (tempView.tag == 99) {
            [[subviews objectAtIndex:i] removeFromSuperview];
        }
    }
}

В firstView у меня есть метод с именем done, который отправляет уведомление, которое наблюдает основной ViewController.

-(IBAction) done:(id)sender {       
    [fileSelectedNotification postNotificationName:@"removeSplitView" object:self];    
}

Вам также необходимо создать fileSelectedNotification где-нибудь в вашем приложении. Я сделал это через viewDidLoad. Похоже на это.

fileSelectedNotification = [NSNotificationCenter defaultCenter];

Я, конечно, также добавил это

NSNotiicationCenter *filesSelectedNotification;

в .h файл этого viewController.

Таким образом, когда я нажимаю кнопку «Готово» (которая является кнопкой в ​​моем приложении), она удаляет splitViewController из поля зрения.

Работает нормально. Я получил все это только от чтения документов.

1 голос
/ 16 апреля 2010

Совсем нет. Можно иметь контроллер панели вкладок в корне иерархии, где каждая вкладка имеет контроллер разделенного представления, например.

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

1 голос
/ 09 апреля 2010

Apple, HIG говорит, что вы не можете. Значит, они, вероятно, заблокировали вас от этого, поэтому я сомневаюсь, что вы заработаете. некоторые разработчики написали свои собственные

0 голосов
/ 14 ноября 2013

Просто для справки, я думаю, что это путь: см. Этот вопрос .

...