UISplitViewController на iPhone: поп в/показать основной вид из контроллера подробных представлений

Я использую новый iOS 8 UISplitViewController. Если я запустил его на iPhone, у меня возникла следующая проблема:

Мой основной контроллер представления запускает контроллер подробного представления для отображения. Контроллер подробных представлений выводит новый контроллер представления в стек UINavigationController в подробном представлении.

Теперь у меня есть проблема, если я хочу вернуться к основному контроллеру представления с нового контроллера представления.

Как я могу это сделать

[self.navigatonController popToRootViewControllerAnimated:YES];

не работает. Я хочу показать основной контроллер представления на iPhone. Поэтому мне нужно снова открыть два представления.

Любые идеи, как я могу это сделать?

Ответы

Ответ 1

UIViewControllers имеют свойство splitViewController, поэтому вы можете получить ссылку на соответствующий контроллер навигации через него, а затем вызвать popViewControllerAnimated.

Здесь он находится в Swift (входит где-то в контроллер подробного представления):

if let navController = splitViewController?.viewControllers[0] as? UINavigationController {
    navController.popViewControllerAnimated(true)
}

Ответ 2

Я только что нашел решение на форуме разработчиков Apple: Как вручную "вернуться" к MasterViewController в UISplitViewController на iPhone

Старая (и, возможно, все еще действительная) рекомендация - позволить Мастеру view intiate "pop". Для этого детальный взгляд должен сообщите мастер-представление о нажатии вашей пользовательской кнопки. Это может достигается путем определения протокола, в котором основным видом является делегат и подробный вид имеют переменную, называемую "делегат". когда мастер подталкивает подробный вид, он устанавливает эту переменную делегата в самостоятельно. Теперь в подробном представлении есть крючок, чтобы сообщить главное представление.

Это означает, что из контроллера представления (под) подробно рассмотрен метод контроллера первичного представления:

(Sub) Подробный контроллер просмотра:

UINavigationController *navCon = [self.splitViewController.viewControllers objectAtIndex:0];
MyPrimaryViewController *primary = [navCon.viewControllers objectAtIndex:0];

[primary popToMaster];

Контроллер первичного представления:

- (void)popToMaster
{
    [self.navigationController popViewControllerAnimated:YES];
}

Ответ 3

У меня такая же проблема! Насколько я понял, splitViewController "выглядит" как навигационный контроллер на iPhone ( "свернутый" splitVC), но detailVC на самом деле НЕ находится в том же стеке навигации, что и masterVC. Вот почему ваше сообщение "popToRootViewController" больше не работает.

На данный момент я не нашел пути. я скажу вам, найду ли я решение.