1. 程式人生 > >iOS 隨意push,pop到任意控制器

iOS 隨意push,pop到任意控制器

主題思想:如A、B、C、D 四個檢視控制器

想要在 A push B 後, B 在push 到 D ,然後從 D pop 到 C ,在從 C pop 的A

解決方法如下:

1.假如此時在 A 控制器下,想要到 push 到 B, 可以這樣寫

1[self.navigationController pushViewController: B :YES];

這時 self.navigationController.viewControllers 中按順序含有 [A,B]

2.此時已經到 B 控制器下了, 接下來是 push 到 D, 可以這樣寫

1[self.navigationController pushViewController: D :YES];

這時 self.navigationController.viewControllers 中按順序含有 [A,B,D]

接下來很重要,很重要,很重要

如何想從 D pop 到 C, 看陣列[A,B,D] 中壓根就沒有C 該如何pop 到C呢?

這時就需要對這個陣列進行修改,將C 加入進去

於是 你會如下寫:

1[self.navigationController.viewControllers addObject:C];

發現報錯,這是因為self.navigationController.viewControllers 是不可變陣列,沒辦法了,我們只好轉換一下了:

1NSMutableArray*tempMarr =[NSMutableArrayarrayWithArray:self.navigationController.viewControllers];

此時再加入C 就容易多了,咦,聰明的你會發現從 D pop C 不能直接將 C直接 addObject;

當然,我會這樣做:

1[tempMarr insertObject:C atIndex:tempMarr.count- 2];

這時候 tempMarr 是這樣的 [A,B,C,D], 可是 要想 從 C pop 到 A ,陣列中就不能有 B

就需要 將tempMarr 變成 [A,C,D] ,至於怎麼變,你比我懂得多,

懂得思考的同學會發現 這時的self.navigationController.viewControllers 依然是 [A,B,D], 不用急,不用怕navigationController

 有這樣一個方法, 可以搞定,如下:

1[self.navigationController setViewControllers:tempMarr animated:YES];

有的同學會說,這不是直接把 B 替換 成 C 嗎

看上去是這樣,可是跳轉的時機,時機,時機重要的事情說三遍,還有檢視的切換,切換,切換

此時還在 B 控制器中,這些處理過程都是在 B 中處理的 , 也必須是 B 執行了 push 到 D 方法後,也就是說

1[self.navigationController pushViewController:D animated:YES];

之後 進行的 陣列處理;

附加程式碼:

在B 控制器中處理:

12345678910111213-(void)pushTest {[self.navigationController pushViewController:D animated:YES];NSMutableArray*tempMarr =[NSMutableArrayarrayWithArray:self.navigationController.viewControllers];[tempMarr insertObject:C atIndex:tempMarr.count- 2];[tempMarr removeObject:self]; //此時 的self 就是指 B ,因為在 B 中呢[self.navigationController setViewControllers:tempMarr animated:YES];}

相關推薦

iOS 隨意push,pop任意控制器

主題思想:如A、B、C、D 四個檢視控制器想要在 A push B 後, B 在push 到 D ,然後從 D pop 到 C ,在從 C pop 的A解決方法如下:1.假如此時在 A 控制器下,想要到 push 到 B, 可以這樣寫1[self.navigationCont

ionic2 頁面跳轉 push() pop() NavController,navParams

htm script mark int popup struct from navi lin 新建頁面http://zyyapp.com/post/185.html Ionic 2之頁面堆棧 :http://blog.csdn.net/u010730126/articl

iOS UI07_導航視圖控制器

nsstring ger creat tco dal role var make uilabel // // MainViewController.m // UI07_導航視圖控制器 // // Created by dllo on 15/8/6.

iOS 添加WKWebView導致控制器無法釋放的問題

tde conf dealloc instance receives nonatomic pro 最終 ace 在WkWebView與JavaScript交互中,經常會在原生中註入MessageHandler,app中註入MessageHandler的方法 WKWe

redis push/pop(List)的17條命令

插入 ger com 1.3 解釋 不執行 時間 從表 方法 一、Blpop 命令移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。redis 127.0.0.1:6379> BLPOP LIST1 LIST2 ..

用單鏈表實現棧 Push,Pop時間為O(1)

pri 時間 int 實現一個棧 我們 來看 一個棧 list() linked 用單鏈表實現一個棧,要求Push Pop的運行時間為O(1),來自《算法導論》習題10.2-2。 因為Push和Pop操作伴隨著棧頂元素的插入和刪除,所以,這個問題的本質是:在單鏈表的哪個位

Vue push() pop() shift() unshift() splice() sort() reverse() ...

data con 最後一個元素 eve 條件 返回 授權 順序 檢查 Vue 變異方法 push() 方法可向數組的末尾添加一個或多個元素,並返回新的長度。 pop() 方法用於刪除並返回數組的最後一個元素。 shift() 方法用於把數組的第一個元素從其中刪除,並返回

iOS:給標籤欄控制器的UITabbarItem新增點選動效

一、介紹 現在很多app,附帶很炫的點選效果,讓使用者享受到非常棒的體驗,例如動畫、漸變、音效等。 當然,市面上大多數app的標籤欄點選還是挺中規中矩的,只是切換圖片而已。然而,這個是可以優化的,附帶點特效能極大為app增色。 例如音效和波動,淘寶和今日頭條就是這麼實現的,效果特別棒。這裡實現一下UIT

IOS 9.0以上的控制器處理

NSString *version = [UIDevice currentDevice].systemVersion; if (version.doubleValue >= 9.0 && version.doubleValue < 11.0 )

第010課 彙編-add,sub,push,pop

add,sub push,pop 內容綱要 1.add,sub 2.push,pop 3.EFL 詳細內容 1.add,sub 加減法指令 (sub)add reg/m,reg/m/Im 當add m,m時,提示improper operand

iOS 快速獲取當前顯示控制器的正確方式

背景 在開發過程中,經常需要獲取當前 window, rootViewController, 以及當前 ViewController 的需求. 如果 .m 實現不是在當前檢視情況下, 我們需要快速的獲取到當前控制器, 這種情況就需要先做好一層封裝,我一般是通過

iOS 重簽名工具+時間控制器

2018年11月11日 10:44:49 qq_39860936 閱讀數:10 標籤: iOS ios

iOS 在當前顯示的控制器裡如何判斷程式是否被殺死?

         聯絡人:石虎 QQ:1224614774  暱稱: 嗡嘛呢叭咪哄                              QQ群:807236138   群稱: iOS 技術交流學

self.navigationController push到指定控制器

1 返回到當前頁面上面第三級控制器 int idx = (int)[[self.navigationController viewControllers]indexOfObject:self]; [self.navigationC

ios--多級push或present Controller 直接返回到根目錄

iOS-多級push或present Controller 直接返回到根目錄 // push /present Controller 回到根目錄 -(void)toRootViewController{ UIViewController * viewController =

iOS 如何關聯xib和控制器

Xib檔案建立的時候是選擇User Interface裡面的Empty模板建立,當然,如果你想建立一個新的歡迎介面,可以直接選擇Launch Screen模板,此外,Storyboard檔案也是在這

快速定位iOS線上BUG在哪個控制器崩潰

快速定位iOS線上BUG在哪個控制器崩潰 快速定位iOS線上App崩潰在哪個控制器裡面,需要和後臺配合使用 下載本專案並新增手動新增到專案裡 新建所有的頁面都繼承於YZViewController 在AppDelegate的didFinishLaunchingWithOptions

push/pop堆疊指令

堆疊是儲存器中專用的緩衝區,用於暫存暫存器資料或地址指標,push/pop就用於堆疊的操作,這兩個指令一般用在: 1、子程式呼叫,為了保護現場,把所要用的暫存器中的內容先暫時儲存起來,在子程式呼叫結束之前,按照先進後出的原則,把資料恢復。 2、有時候,需要臨時用一下某

iOS 如何返回(pop)到指定頁面

APP開發的過程中會遇到跳轉問題,我們大部分是調回到上一個頁面,可所有時候也會遇到跳轉到指定頁面的需求,蘋果給我們提供了幾種跳轉方式 1.退出到跟檢視控制器 popToRootViewControl

iOS 跳轉到任意某個rootViewController

//x 代表第幾個根檢視,任意檢視跳轉哦 self.tabBarController.selectedViewController = self.tabBarController.childViewControllers[X]; [self.navigationContro