ПРИМЕЧАНИЕ. Прежде чем читать этот вопрос, обратите внимание, что я прочитал предыдущие вопросы, которые объясняют недостатки, связанные с реализацией Apple UISplitViewController, и как я должен использовать «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
)