導(dǎo)航控制器原理:
- 導(dǎo)航控制器:是一個容器視圖控制器,專門用來管理其他的視圖控制器,導(dǎo)航控制器管理的視圖控制器在導(dǎo)航控制器中的存儲結(jié)構(gòu)是棧結(jié)構(gòu);
- 導(dǎo)航控制器永遠顯示棧頂?shù)哪莻€視圖控制器,
- 讓一個導(dǎo)航控制器去管理其他視圖控制器的方法:
(1) 將視圖控制器作為導(dǎo)航控制器的根視圖控制器,
(2) 使用導(dǎo)航控制器push出來的視圖控制器,也是屬于導(dǎo)航控制器的視圖控制器
__block BOOL isPop = NO;
//采用倒序循環(huán)返回到離當前控制器最近的匹配控制器(根據(jù)需求確定)
[self.navigationController.viewControllers enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *vcName = NSStringFromClass([obj class]);
NSLog(@"控制器名稱: %@ index=%ld", vcName, idx);
if ([vcName isEqualToString:NSStringFromClass([FirstViewController class])] ||
[vcName isEqualToString:NSStringFromClass([SecondViewController class])]) {
[self.navigationController popToViewController:obj animated:YES];
isPop = YES;
*stop = YES;
}
}];
//棧中未找到匹配的控制器時統(tǒng)一返回
if (!isPop) {
self.tabBarController.selectedIndex = 0;
[self.navigationController popToRootViewControllerAnimated:YES];
}
若需要刪除當前控制器,比如:訂單確認頁面跳轉(zhuǎn)到支付頁面,無論是否成功皆不會返回到此界面時。
NSMutableArray*vcMutArr = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[vcMutArr removeObject:self];
[self.navigationController setViewControllers:vcMutArr animated:YES];
需求若為刪除多個控制器,可結(jié)合倒序遍歷可變數(shù)組刪除目標控制器,然后賦值給導(dǎo)航控制器的方式。
首次寫技術(shù)性的東西,若發(fā)現(xiàn)錯誤,歡迎斧正,我會及時更新,感激不盡!