iPhone - распустите несколько ViewControllers

У меня есть длинная иерархия Контроллеров Представления;

в первом Контроллере Представления я использую этот код:

SecondViewController *svc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self presentModalViewController:svc animated:YES];    
[svc release];

Во втором Контроллере Представления я использую этот код:

ThirdViewController *tvc = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self presentModalViewController:tvc animated:YES];    
[tvc release];

и так далее.

Таким образом, существует момент, когда у меня есть много Контроллеров Представления, и я должен возвратиться к первому Контроллеру Представления. Если я возвращаюсь один шаг сразу, я использую в каждом Контроллере Представления этот код:

[self dismissModalViewControllerAnimated:YES];

Если я хочу возвратиться непосредственно от, скажем, шестого Контроллера Представления до первого, что я должен сделать для отклонения всех Контроллеров сразу?

Спасибо

45
задан Oscar Peli 31 May 2010 в 14:37
поделиться

2 ответа

Я нашел решение.

Конечно, вы можете найти решение в самом очевидном месте, поэтому, читая из справки UIViewController для метода dismissModalViewControllerAnimated ...

Если вы представляете несколько модальных контроллеров представления контроллеров последовательно, и таким образом построить стек модальных контроллеров представления контроллеров, вызов этого метода на контроллера представления, находящегося ниже в стеке отменяет его непосредственный дочерний контроллер представления контроллер и все контроллеры представления выше этого дочернего контроллера в стеке. Когда это происходит, только самый верхний вид удаляется анимированным способом; все промежуточные контроллеры представления просто удаляются из стека. самый верхний вид закрывается с помощью своего модальный стиль перехода, который может может отличаться от стилей, используемых другими контроллеров представления, расположенных ниже в стеке.

поэтому достаточно вызвать dismissModalViewControllerAnimated на целевом представлении. Я использовал следующий код:

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

чтобы вернуться к себе.

24
ответ дан 26 November 2019 в 20:52
поделиться

Отклонить верхние анимированные VC, а остальные - нет. Если у вас есть три модальных VC

[self dismissModalViewControllerAnimated:NO]; // First
[self dismissModalViewControllerAnimated:NO]; // Second
[self dismissModalViewControllerAnimated:YES]; // Third

EDIT: если вы хотите сделать это только одним методом, сохраните иерархию в массиве VC и отклоните последний анимированный объект, а другие нет.

0
ответ дан 26 November 2019 в 20:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: