ページの3段階のジャンプ、1つのキーは1級のページの需要に戻ります

1772 ワード

1.すべてのコントローラの配列を取得し、ページがCページにジャンプすると、Bページをデータから削除し、戻るボタンをクリックすると、ページはそのままAページにジャンプします.
- (void)back {
    NSMutableArray *vcArr = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    [vcArr removeObjectAtIndex:vcArr.count-2]; //            
    self.navigationController.viewControllers = vcArr;
    [self.navigationController popViewControllerAnimated:YES];
}

2.コントローラ配列内でジャンプしたいコントローラの位置を直接見つけ、そのコントローラを取得してpopを行う
NSInteger num = self.navigationController.viewControllers.count;
if (num > 3) {
   UIViewController *popVC = self.navigationController.viewControllers[num - 3];
   [self.navigationController popToViewController:popVC animated:YES];
}

3.CページでBlockを定義し、「戻る」をクリックしてBlockイベントを呼び出し、Blockに戻るイベントを書く
typedef void(^BackBlock)(void);
@property (nonatomic, copy) BackBlock backBlock;
- (void)back {
    [self.navigationController popViewControllerAnimated:NO];
    __weak typeof(self) weakSelf = self;
    weakSelf.backBlock();
}

B.m:
C_Controller *vc = [[C_Controller alloc] init];
vc.backBlock = ^(){
    [self.navigationController popViewControllerAnimated:NO];
};
[self.navigationController pushViewController:vc animated:YES];


4.
for (UIViewController *vc in self.navigationController.viewControllers) {
            if ([vc isKindOfClass:[MineViewController class]]) {
                [self.navigationController popToViewController:vc animated:YES];
            }
        }

5.
[self.navigationController pushViewController:vc animated:YES];

 UINavigationController *nav = self.navigationController;
 UIViewController *root = nav.viewControllers[0];
 nav.viewControllers = @[root,vc];