Как уволить два или более увольнениеМодальввевконтроллер?
-
28-09-2019 - |
Вопрос
Мне нужно увольнять два модальных контроллера зрения, я знаю, как поп-два или более контроллеров просмотра
UINavigationController* navController = self.navigationController;
NSArray *array=[navController viewControllers];
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[navController popToViiewController:controller animated:YES];
Это то, как я могу вернуться к своему первому представлению, но если есть два или более увольнение модального представления, то как я могу перейти назад
Пожалуйста, помогите мне, спасибо, Мадан Мохан
Решение 4
UINavigationController* navController = self.navigationController;
NSArray *viewControllers=[navController viewControllers];
UIViewController* controller = [viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];
Если вы устанавливаете объект по индексу 0 в вышеуказанном коде, он приведет вас к первому просмотру, который представляет собой контроллер Push View.
1) RootView ---> moodalview1 ---> moodalview2 ---> moodalview3, если вы используете выше код, вы будете в Root View.
2) RootView ---> pushView1 ----> moodalview1 ---> moodalview2 -----> moodalview3. Если вы используете выше код, вы будете в PushView.
Другие советы
От документов для -[UIViewController dismissModalViewController]
:
Если вы представляете несколько контроллеров модального просмотра подряд, и, таким образом, построить стопку модальных контроллеров просмотра, вызывая этот метод на контроллере представления ниже в стеке, отпускает его немедленный контроллер ребенка и все контроллеры просмотра выше этого ребенка на стеке. Когда это произойдет, только самый верхний вид уволен в анимированной моде; Любые промежуточные контроллеры просмотра просто удаляются из стека. Самый верхний вид уволен с использованием своего стиля модального перехода, который может отличаться от стилей, используемых другими контроллерами просмотра ниже в стеке.
Используйте этот код ниже
[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES];
Я использую следующую утилиту статического метода для моделирования PoptorootViewController для стека модалей:
// Util.m
+ (void)popModalsToRootFrom:(UIViewController*)aVc {
if(aVc.parentViewController == nil) {
return;
}
else {
[Util popModalsToRootFrom:aVc.parentViewController]; // recursive call to this method
[aVc.parentViewController dismissModalViewControllerAnimated:NO];
}
}
Вы используете это так:
[Util popModalsToRootFrom:aViewController];
Если вы хотите что-то более продвинутое, вы можете сделать это:
+ (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count {
if(aVc.parentViewController == nil || count == 0) {
return;
}
else {
[Util popModalsFrom:aVc.parentViewController popCount:count-1]; // recursive call to this method
[aVc.parentViewController dismissModalViewControllerAnimated:NO];
}
}
Затем пройдите количество модальных модальев или просто -1, чтобы поп-путь до корня.
Для iOS 5
, поддержка animation
==YES
(Просмотры будут скрываться в последовательности) и completion
блокировать:
+ (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion {
if (VC.presentedViewController == nil) {
if (completion) {
completion();
}
} else {
[BaseViewController dismissAllVCsForVC:VC.presentedViewController
animated:animated
completion:
^{
[VC dismissViewControllerAnimated:animated completion:completion];
}];
}
}