UINavigationController
是在 iOS 開發(fā)當(dāng)中大量使用到的一個(gè)元件,我們可以用 pushViewController:animated:
切換到下一層 view controller,也可以用 popViewControllerAnimated:
回到上一層寺酪,或是用 popToRootViewControllerAnimated:
回到最上層的 root view controller。不過(guò)這些動(dòng)作都得透過(guò)某種方式來(lái)觸發(fā),例如按下某顆按鈕然後就可以回到上一層。
舉例來(lái)說(shuō)边琉,我現(xiàn)在有三個(gè) view controllers 在 UINavigationController 裡頭,分別是「商品頁(yè)」记劝、「結(jié)帳頁(yè)」变姨、「結(jié)果頁(yè)」,流程很簡(jiǎn)單厌丑,就是讓使用者點(diǎn)選喜歡的商品之後定欧,切換到結(jié)帳頁(yè)面渔呵,結(jié)帳成功之後會(huì)顯示結(jié)果,然後使用者點(diǎn)了左上角的「Back」就會(huì)回到商品頁(yè)(因?yàn)橐呀?jīng)結(jié)帳成功了砍鸠,不應(yīng)該回到結(jié)帳頁(yè))扩氢。
〔商品頁(yè)〕 +-->〔結(jié)帳頁(yè)〕+-->〔結(jié)果頁(yè)〕
^ +
| |
+--------------------------+
我最常看到的作法是爷辱,自訂 leftBarButtonItem
或 backBarButtonItem
录豺,當(dāng)使用者點(diǎn)下之後就會(huì)呼叫 popToRootViewControllerAnimated:
讓畫面回到「商品頁(yè)」,只不過(guò)我覺(jué)得這樣有點(diǎn)麻煩饭弓,所以我最近改用另一個(gè)方法双饥。
我現(xiàn)在的作法是這樣:以這個(gè)例子來(lái)說(shuō),我會(huì)在「結(jié)帳頁(yè)」呼叫 pushViewController:animated:
切換到「結(jié)果頁(yè)」之後弟断,把「結(jié)帳頁(yè)」從 UINavigationController 的 viewControllers
當(dāng)中抽掉咏花。
[self.navigationController pushViewController:resultViewController animated:YES];
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[viewControllers removeObject:self];
self.navigationController.viewControllers = viewControllers;
把自己從navigationController 的 stack 中移除也算是不錯(cuò)的做法,但是比較好的 UX 可能是結(jié)帳完成後阀趴,用 presentViewController 的方式把結(jié)果頁(yè)叫出來(lái)昏翰,這樣只要右上角定義一個(gè)完成來(lái) dismiss 自己,同時(shí)結(jié)帳頁(yè)面也被從 stack 中移除 .. 一點(diǎn)個(gè)人淺見 :D
就設(shè)計(jì)上來(lái)說(shuō)刘急,結(jié)帳完成的頁(yè)面棚菊,不要讓用戶按 back,而是按頁(yè)面一個(gè)特別的按鍵(如結(jié)帳完成)排霉,是不是更好窍株?退回鍵的本意就是退回。也就是攻柠,在結(jié)帳完成頁(yè)面,要隱藏退回鍵后裸。