練習-回到之前的頁面
在UIKit中,回到之前的頁面有不同的方式,本篇以Storyboard為基礎,練習以下幾種:
Unwind, Dismiss, Pop
首先,project Storyboard的結構:
分開上下兩條path
第二條path (Z0~B1)
從Z0 的button直接拖Segue到B1,選擇Present Modally。完成後,在Z0按button,就會從下彈出B1頁
從B1回Z0, 可以有幾種方法:
- 可以用手勢操作Swipe回去
- 可以unwind**回去,前提是在想要回到的頁declare了unwind method
- 由於B1 是由Present方法trigger,由Present方法trigger的頁,可以用dismiss 返回。這裡我為B1 獨立開了個ViewController文件,從自定返回button拉IBAction,裡面放dismiss的code。Dismiss 的code也很簡單,如下
Dismiss只是返點了上一頁,如果前面還有好幾頁用show trigger的頁,像A1~A3,dismiss是不會返回。這裡做了實驗,由A2 present modally 去A4, A4 dismiss 只會回到A2
第一條Path (Z0 ~A3/A4)
Z0 show to A1,
A1 show to A2,
A2 show to A3, present modally to A4, Unwind to Z0
A4 Dismiss to A2
A3使用了pop 方法,分別pop回上一頁A2, pop回特定頁A1,pop回最初的頁
popToRootViewController 的命名 意思很明顯,回到root的controller
popViewController是返回上一頁
popToViewController是返回到指定的頁面,這裡的navigationController.viewControllers 是一條array,包括了由root到到目前頁的page,因此上圖裡,先確定了有navigationController,再count navigationController.viewControllers有多少頁,最後從目前頁減去需要的頁,得出指定的頁,跳轉
(注意這裡的count,由Z0 到 A1, A2, A3, 共4頁,Count = 4,但由於array 是從0開始數,A1頁在array裡是 在 1 的位置,所以要跳到1, 就要count - 3, 而不是由A3 那條減兩頁就等如A1)