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
是不可變陣列,沒辦法了,我們只好轉換一下了:
1 | NSMutableArray*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