iOS導(dǎo)航返回指定控制器

導(dǎo)航控制器原理:

  1. 導(dǎo)航控制器:是一個容器視圖控制器,專門用來管理其他的視圖控制器,導(dǎo)航控制器管理的視圖控制器在導(dǎo)航控制器中的存儲結(jié)構(gòu)是棧結(jié)構(gòu);
  2. 導(dǎo)航控制器永遠顯示棧頂?shù)哪莻€視圖控制器,
  3. 讓一個導(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)錯誤,歡迎斧正,我會及時更新,感激不盡!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容