У меня есть длинная иерархия Контроллеров Представления;
в первом Контроллере Представления я использую этот код:
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];
Если я хочу возвратиться непосредственно от, скажем, шестого Контроллера Представления до первого, что я должен сделать для отклонения всех Контроллеров сразу?
Спасибо
Я нашел решение.
Конечно, вы можете найти решение в самом очевидном месте, поэтому, читая из справки UIViewController для метода dismissModalViewControllerAnimated ...
Если вы представляете несколько модальных контроллеров представления контроллеров последовательно, и таким образом построить стек модальных контроллеров представления контроллеров, вызов этого метода на контроллера представления, находящегося ниже в стеке отменяет его непосредственный дочерний контроллер представления контроллер и все контроллеры представления выше этого дочернего контроллера в стеке. Когда это происходит, только самый верхний вид удаляется анимированным способом; все промежуточные контроллеры представления просто удаляются из стека. самый верхний вид закрывается с помощью своего модальный стиль перехода, который может может отличаться от стилей, используемых другими контроллеров представления, расположенных ниже в стеке.
поэтому достаточно вызвать dismissModalViewControllerAnimated на целевом представлении. Я использовал следующий код:
[[[[[self parentViewController] parentViewController] parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];
чтобы вернуться к себе.
Отклонить верхние анимированные VC, а остальные - нет. Если у вас есть три модальных VC
[self dismissModalViewControllerAnimated:NO]; // First
[self dismissModalViewControllerAnimated:NO]; // Second
[self dismissModalViewControllerAnimated:YES]; // Third
EDIT: если вы хотите сделать это только одним методом, сохраните иерархию в массиве VC и отклоните последний анимированный объект, а другие нет.