方法一:
UINavigationControllerDelegate
這個代理真的很簡單反症,就是當(dāng)一個viewController要顯示的時候通知一下外面,給你一個機(jī)會進(jìn)行設(shè)置存捺,包含如下兩個函數(shù):
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
當(dāng)你需要對某些將要顯示的viewController進(jìn)行修改的話槐沼,可實現(xiàn)該代理。
在B界面實現(xiàn)代碼:
方法二:
這是在C頁面中的代碼:
- (void)viewDidLoad {? ?
?[superviewDidLoad];
//得到當(dāng)前視圖控制器中的所有控制器
NSMutableArray*array = [self.navigationController.viewControllers mutableCopy];
//把B從里面刪除
[array removeObjectAtIndex:1];
//把刪除后的控制器數(shù)組再次賦值
[self.navigationController setViewControllers:[array copy] animated:YES];
}
方法三
UIViewController*viewController=nil;
for(UIViewController*tempVc in self.navigationController.viewControllers) {
if([tempVc isKindOfClass:[RFSelectHeadTypeViewController class]]) {
viewController=tempVc;
}
}
[self.navigationController popToViewController:viewController animated:YES];
利用模態(tài)跳轉(zhuǎn)捌治,從A present到B岗钩,再從B present到C,然后從C present到D肖油,最后要從D返回到A兼吓,返回過程如下:
-(void)dismissModalStack {
UIViewController *vc = self.presentingViewController;
while (vc.presentingViewController) {
vc = vc.presentingViewController;
}
[vc dismissViewControllerAnimated:YES completion:NULL];
}