4

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

Я могу получить эту работу, никаких проблем, и я могу уволить весь стек с помощью:

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

в модальном представлении «Level 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]; 

Я не могу вернуться к «Level 0», я только вернуться к "1-го уровня.

Любые предложения?

ответ

2

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

2-го уровня управления будет осуществлять это где self.delegate является контроллер уровня 1

[self.delegate controllerDidFinish:self]; 

Уровень 1 будет осуществлять:

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

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

+0

Спасибо. Я установил протокол Level2, но у меня возникла проблема «установка делегата контроллера уровня 2 в качестве контроллера уровня 1». Я прочитал несколько других сообщений, но у меня возникла проблема, обволакивающая мою голову. – CraigH

+0

Когда Уровень 1 создает экземпляр контроллера уровня 2, вы можете сделать level2.delegate = self; – rickharrison

+0

Отлично. Спасибо, Рик, я понял. – CraigH

0

Почему не используется,

[self.navigationController popToRootViewControllerAnimated:YES]; 

 Смежные вопросы

  • Нет связанных вопросов^_^