『簡易說明Xcode』顯示下一個畫面方法(由程式觸發的方式 — Segue)
有時候畫面上有10個Button就會有10個Segue連結到下一頁,但是由程式觸發segue則可以使用 一個Segue,由Controller拉Segue到下一個畫面,再由程式判斷是那一個Button執行。
建立Segue的方式進入下一個畫面:
由程式透過Segue進入下一個畫面,需要在Storyboard拉一個Segue。
Step1:在Storyboard點選該畫面的View Controller,按住滑鼠右鍵拖曳到下一個要顯示的View Controller建立Segue。
Step2:必須要設定Storyboard Segue的Identifier,因為要從程式指定Segue ID進入特定的Controller。
Step3:從起點的 Controller拉Segue到終點的Controller,然後設定Segue ID,最後就是從程式透過Segue ID觸發,切換到下⼀個畫面。然而如何透過程式觸發呢?那就是呼叫performSegue()。
performSegue(),主要有兩個參數,分敘如下:
- identifier:要從哪一個Segue去下一個畫面,也就是需要Segue ID,如果輸入錯誤或是不存在的Segue ID則會Crash。
- sender:傳送資料用,與prepare()的sender為一組,如這邊傳送資料那prepare()的sender會收到。
傳送資料到下一個畫面:
因為是由Segue進入下下一個畫面,所以會觸發prepare(),因此可以使用prepare()來修改下一個Controller的property,來達到傳送資料的方式。
如需要詳細了解可以參考下面這一篇。
設定Object Tag,用來確認是什麼Object被觸發:
因為只有ㄧ個Segue,所以有時需要知道是哪Object觸發的,這時可以設定Tag,然後再prepare()時判斷Object Tag,得知是哪個Object觸發,並進行相對應的處理。點選要設定的Object『如下圖示步驟1』之後,在Show The Attributes inspect『如下圖示步驟2』的View裡面設定Tag『如下圖示步驟3』。需要注意Object必須是繼承View才會有Tag。
程式則需要從performSegue()的第二個參數sender這邊傳送,將哪一個Object觸發的資訊透過sender傳遞給prepare()。
然後在prepare()將傳入的sender轉型為對應的型別,如範例中是Button,所以需要轉型為UIButton(sender as? UIButton)。
範例說明:
建立Page1ViewController.swift與Page2ViewController.swift兩個Controller,在Storyboard上點選Page1ViewController,按住滑鼠右鍵拖曳到Page2ViewController建立Segue,並將這個Segue ID設定為“ToPage2Segue”,最後點選Page1ViewController加入Navigation Controller。
Step1:在Page1ViewController.swift的@IBAction按鍵內,利用performSegue()指定要透過哪個Segue去下一個畫面,並將傳入的sender傳遞到prepare()的sender。
Step2:在Page1ViewController.swift的prepare()裡面指定下一個畫面的Controller,並將sender轉型為UIButton,然後更改下一個畫面的Controller的property。
Step3:在Page2ViewController.swift的viewDidLoad()更新畫面,顯示是Button1還是Button2觸發顯示下一個畫面。