Как уволить два или более увольнениеМодальввевконтроллер?

StackOverflow https://stackoverflow.com/questions/4276188

  •  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];
         }];
     }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top