Как вернуться к rootViewController +1? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть необходимость вернуться к нескольким представлениям, но не полностью к корневому контроллеру, я не могу найти способ, кроме как вернуться назад, используя следующую команду

[self.navigationController popToRootViewControllerAnimated:YES];

как мне вернуться обратно в root + 1?

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

, если вы знаете, какой контроллер просмотра вы хотите вернуть.

 UIViewController *targetVC = XXViewController.class ;
NSArray <UIViewController *>*vcs = self.navigationController.viewControllers ;
[vcs enumerateObjectsUsingBlock:^(UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isKindOfClass:targetVC.class]) {
        [self.navigationController popToViewController:obj animated:YES];
        *stop = YES ;
    }
}];

если вы знаете, какой индекс хотите вернуть.

 NSInteger index = 1 ;
[self.navigationController popToViewController:vcs[index] animated:YES];

следовать неважно

текущий у вас AA, BB два viewcontroller в вашей навигации. Вы идете в DD viewcotrlooer и не хотите показывать последний view-контроллер, когда вернетесь. когда вы открываете DD viewcotrller, вы можете использовать следующий код. Самое главное - поддерживать скольжение.

[self skipCurrentViewcontrollerToViewcontroller:DD.new];


 - (void)skipCurrentViewcontrollerToViewcontroller:(UIViewController *)toVC
{
    if (self.navigationController == nil) {
        NSAssert(NO, @"the navigation is empty!");
        return ;
    }
    NSArray *vcArray = self.navigationController.viewControllers ;
    if (vcArray.count > 0) {
        NSMutableArray *desArray = [NSMutableArray arrayWithCapacity:4];
        for (int i = 0 ;i < vcArray.count - 1 ; i++) {
            [desArray addObject:vcArray[i]];
        }
        [desArray addObject:toVC];
        [self.navigationController setViewControllers:desArray animated:YES];
    }
    else{
        [self.navigationController pushViewController:toVC animated:YES];
    }
}
0 голосов
/ 30 августа 2018

Я использую следующие методы для перехода к конкретному VC:

-(void)popToViewControllerWithAnimation:(BOOL)showAnim WithClass:(Class)class{
for(UIViewController *vc in self.navigationController.viewControllers){
    if([vc isKindOfClass:class]){
        [self.navigationController popToViewController:vc animated:showAnim];
        break;
    }
  }
}

-(void)popViewControllers:(int)count{
   [self.navigationController popToViewController: self.navigationController.viewControllers[self.navigationController.viewControllers.count-count-1] animated:YES];
}
0 голосов
/ 29 августа 2018
int viewControllerIndex = 1; //Note that object 1 is the first object after the root
NSArray *viewControllersArray = self.navigationController.viewControllers ;
[self.navigationController popToViewController:viewControllersArray[viewControllerIndex] animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...