『簡易說明Xcode』資料傳遞(Unwind segue方式)

在Xocde中進入了下一個畫面,要回到之前的畫面,有幾種方式,而現在將介紹的Unwind segue,而Unwind segue不但可以返回之前畫面,也可以利用Property來傳遞資料,使用Unwind segue需要注意兩點:

  • 第一點為必須是有進入過的頁面才能返回去。簡單來說從第一個畫面進入第二個畫面,再從第二個畫面進入第三個畫面,則可以在第一個畫面的Contorller註冊一個Unwind segue的標記,之後則在第三頁可以回到第一頁。若是第一個畫面直接進入第三個畫面,那說要回到第二個畫面,則就沒有辦法使用Unwind segue。
  • 第二點則是不同的Controller有相同名稱的Unwind segue的標記,那這樣返回時,會返回最近Unwind segue標記的Controller。如第一個畫面與第二個畫面的Controller都有相同名稱的Unwind segue的function,那簡單來說從第一個畫面進入第二個畫面,再從第二個畫面進入第三個畫面,這時從第三個畫面會返回時會回到第二個畫面,因為距離比較近。

假如第三個畫面要回到第一個畫面,則需要在第一個畫面的Controller註冊一個Unwind segue的回來標記。而這個標記就是寫一個@IBAction的function,並註冊segue為UIStoryboardSegue。這樣就可以從之後的任一頁面回到第一個畫面。

註冊完返回的標記後,則可以在最後進入的頁面上,建立一個連結到剛剛註冊的標記。如在第三個畫面,按下Button要返回第一個畫面,在Document Outline裡,選擇Button,然後按住滑鼠右鍵,拖曳到Exit上,則可以看到剛剛註冊的標記,選擇要返回的標記即可。這邊要注意,只有加上@IBAction而且參數型別為UIStoryboardSegue的function才符合資格,才會顯示,而且這邊會列出專案內所有符合的function。

範例說明:

Step1:在Page1ViewController.swift註冊一個Unwind segue的標記Method,func name可以任意取名,而需要注意是segue:一定要是UIStoryboardSegue,不然在Exit內會找不到。

Step2:在Page2ViewController.swift建立兩個Button的@IBAction,得知使用者選擇顯示還是隱藏Page1ViewController的Image View。

Step3:有兩種方式可以傳送資料:

  • 在Page2ViewController.swift中的prepare()設定要傳送的資料,因為Unwind segue在觸發前,會先觸發Unwind segue起點Controller 的Prepare,因為它要準備 Segue,回到之前的畫面。
  • 在Page1ViewController.swift中所註冊的Unwind segue Method中,利用segue.source as? controller取得來源的Controller資訊。

--

--