iPhone - отклонить родительский модальный вид - PullRequest
4 голосов
/ 12 июля 2010

Я набросал рабочий процесс приложения, в котором у вас есть главное меню «Уровень 0», которое вызывает модальное представление «Уровень 1», которое вызывает другое модальное представление «Уровень 2».

Я могу заставить это работать, нет проблем И я могу удалить весь стек, используя:

[[[self parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];

в модальном представлении «Уровень 2».

Моя проблема в том, что в модальном представлении «Уровень 2» есть панель навигации. Я не могу удалить весь стек. Код, который я перечислил выше, возвращает меня только на один уровень, поэтому он действительно работает так же, как если бы я сделал это:

[self dismissModalViewControllerAnimated:YES];

в модальном представлении «Уровень 2».

Резюме: Когда модальное представление «Уровень 1» вызывает модальное представление «Уровень 2», используя следующее:

Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease];  
[self presentModalViewController:portalMainController animated:YES];

Я могу закрыть весь стек и вернуться в главное меню (уровень 0). НО, когда «Уровень 1» вызывает «Уровень 2» с панелью навигации, подобной следующей:

 Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease];  
 UINavigationController *navigationController = [[UINavigationController alloc]    initWithRootViewController:level2];
 [self presentModalViewController:navigationController  animated:YES];
 [navigationController release];

Я не могу вернуться на «Уровень 0», я только возвращаюсь на «Уровень 1».

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Я бы создал протокол для контроллера уровня 2, такой как Level2Delegate. Затем установите делегата контроллера уровня 2 в качестве контроллера уровня 1. Тогда вы можете сделать что-то вроде следующего:

Контроллер уровня 2 реализует это, когда self.delegate является контроллером уровня 1

[self.delegate controllerDidFinish:self];

Уровень 1 будет реализовывать:

- (void)controllerDidFinish:(Level2Controller *)controller {
    [[self parentViewController] dismissModalViewControllerAnimated:NO];
}

Ключ в том, чтобы создать цепочку событий, а не пытаться отбросить оба сразу.

0 голосов
/ 08 апреля 2012

Почему бы не использовать,

[self.navigationController popToRootViewControllerAnimated:YES];
...