ЗАБЕЛЕЖКА: Преди да прочетете този въпрос, моля, имайте предвид, че прочетох предишните въпроси, които обясняват недостатъците по отношение на внедряването на 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
)