it-swarm.com.ru

Вернуться к RootViewController из модального представления контроллера

Из начального представления - мой RootViewController - я открываю 2 ViewController один за другим по мере продвижения пользователя в иерархии навигации следующим образом:

1) SecondViewController нажимается кнопкой, подключенной к моей раскадровке

2) ThirdViewController представлен модально 

[self performSegueWithIdentifier:@"NextViewController" sender:nil];

Итак, картина такова: RootViewController -> SecondViewController -> ThirdViewController

Теперь в моем контроллере ThirdViewController я хочу иметь кнопку, чтобы вернуться к моему RootViewController 2 раза, то есть вернуться домой. Но это не работает

[self.navigationController popToRootViewControllerAnimated:YES]; 

Только этот парень возвращается один раз в SecondViewController

[self.navigationController popViewControllerAnimated:YES];

Как я могу одновременно удалить модальные и выдвинутые контроллеры представления?

12
Vad

У меня была похожая ситуация, когда в стек навигационных контроллеров было помещено несколько контроллеров представления, а затем последнее представление было представлено модально. На модальном экране у меня есть кнопка Отмена, которая возвращается к контроллеру корневого представления.

В контроллере модального вида у меня есть действие, которое запускается при нажатии кнопки «Отмена»:

- (IBAction)cancel:(id)sender
{
    [self.delegate modalViewControllerDidCancel];
}

В заголовке этого контроллера модального представления я объявляю протокол:

@protocol ModalViewControllerDelegate
- (void)modalViewControllerDidCancel;
@end

И тогда последний контроллер представления в стеке навигации (тот, который представил модальное представление) должен реализовать протокол ModalViewControllerDelegate:

- (void)modalViewControllerDidCancel
{
    [self dismissViewControllerAnimated:NO completion:nil];
    [self.navigationController popToRootViewControllerAnimated:YES];
}

Этот метод выше является важной частью. Он заставляет текущий контроллер представления отклонять модальное представление, а затем он возвращается к корневому контроллеру представления. Обратите внимание, что я передаю NO для dismissViewControllerAnimated: и YES для popToRootViewControllerAnimated: чтобы получить более плавную анимацию от модального представления до корневого представления.

20
Steph Sharp

У меня было такое же требование, но я использовал пользовательские переходы между контроллерами представления. Я столкнулся с концепцией «Unwind Segue», которая, как мне кажется, пришла с iOS6. Если вы ориентируетесь на iOS6 и выше, эти ссылки могут помочь: Для чего нужны сегменты Unwind и как вы их используете?http://chrisrisner.com/Unwinding-with-iOS-and-Storyboards Спасибо.

4
cfc16

Предполагая, что ваш AppDelegate называется AppDelegate, вы можете сделать следующее, чтобы сбросить rootviewcontroller для окна приложения в качестве представления RootViewController.

AppDelegate *appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];
RootViewController *rootView = [[RootViewController alloc] init];
[appDel.window setRootViewController:rootView];
0
Adam Richardson