UISplitViewController не скрива masterViewController в пейзажен режим

ЗАБЕЛЕЖКА: Преди да прочетете този въпрос, моля, имайте предвид, че прочетох предишните въпроси, които обясняват недостатъците по отношение на внедряването на UISplitViewController от Apple и как трябва да използвам „MGSplitViewController“ с отворен код, защото не е твърде лесно просто да скриете главния контролер за изглед на контролер за разделен изглед в пейзажен режим. Моля, имайте предвид, че съм ограничен до използването на нормалния UISplitViewController в iOS 5.1.

Сега към въпроса:

Имам контролер за разделен изглед с изгледи на таблици от лявата страна (основен изглед) и контролер за подробен изглед отдясно. Използвам контролер за навигация, за да контролирам лявата страна, която е изглед на таблица, който преминава към друг изглед на таблица („DataTableViewController“). За да скрия тази лява страна, поставих бутон "скриване" в лентата с инструменти за навигация на контролера за детайлен изглед. Когато се натисне бутонът за скриване, променям свойството "_hideMaster":

-(IBAction)hidePressed
{
    _hideMaster = !_hideMaster;
    // Must manually reset the delegate back to self in order to force call "shouldHideViewController"
    self.splitViewController.delegate = nil;
    self.spliteViewController.delegate = self;

}

и след това автоматично този метод се извиква в делегата на SplitViewController:

// This is called when I change the delegate from nil back to self.
- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation 
{
    return _hideMaster;
}

Когато го отстранявам, виждам, че всичко върви по план и свойството има правилната стойност, когато влезе в метода splitViewController:shouldHideViewController:inOrientation:

Единственият проблем е, че нищо не се случва. Моят най-ляв изглед на таблица (DataTableViewController) не изчезва. Когато погледна по-отблизо, параметърът (UIViewController *)vc в метода на делегиране не е контролерът за изглед на таблица, който искам да скрия, а вместо това контролерът за навигация, свързан с този изглед на таблица. Така че по същество се опитва да скрие навигационния контролер - което очевидно не е това, което искам...

Как мога да направя така, че параметърът UIViewController в автоматично извикания метод на делегат (shouldHideViewController:) да извиква най-горния контролер за изглед, свързан с този контролер за навигация? (В края на краищата искам да скрия DataTableViewController)


person Bitwise    schedule 08.08.2012    source източник
comment
наистина се надявах да получа отговор за това...   -  person Bitwise    schedule 08.08.2012


Отговори (1)


Ето как се справям аз. Може да се нуждае от повече работа, за да накара MasterViewController да се появи отново, ако не бъде инстанциран по пътя обратно.

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
[[self.splitViewController.viewControllers lastObject] view].frame = self.splitViewController.view.frame;
[UIView commitAnimations];
person David Chu    schedule 20.10.2012