Sitemap
彼得潘的 Swift iOS / Flutter App 開發教室

學習 Swift iOS / Flutter App 開發的學生作品集

『簡易說明Xcode』顯示下一個畫面方法(由程式觸發的方式 — Segue)

--

有時候畫面上有10個Button就會有10個Segue連結到下一頁,但是由程式觸發segue則可以使用 一個Segue,由Controller拉Segue到下一個畫面,再由程式判斷是那一個Button執行。

建立Segue的方式進入下一個畫面:

由程式透過Segue進入下一個畫面,需要在Storyboard拉一個Segue。

Step1:在Storyboard點選該畫面的View Controller,按住滑鼠右鍵拖曳到下一個要顯示的View Controller建立Segue。

Press enter or click to view image in full size

Step2:必須要設定Storyboard Segue的Identifier,因為要從程式指定Segue ID進入特定的Controller。

Press enter or click to view image in full size

Step3:從起點的 Controller拉Segue到終點的Controller,然後設定Segue ID,最後就是從程式透過Segue ID觸發,切換到下⼀個畫面。然而如何透過程式觸發呢?那就是呼叫performSegue()。

Press enter or click to view image in full size

performSegue(),主要有兩個參數,分敘如下:

  • identifier:要從哪一個Segue去下一個畫面,也就是需要Segue ID,如果輸入錯誤或是不存在的Segue ID則會Crash。
  • sender:傳送資料用,與prepare()的sender為一組,如這邊傳送資料那prepare()的sender會收到。

傳送資料到下一個畫面:

因為是由Segue進入下下一個畫面,所以會觸發prepare(),因此可以使用prepare()來修改下一個Controller的property,來達到傳送資料的方式。

Press enter or click to view image in full size

如需要詳細了解可以參考下面這一篇。

設定Object Tag,用來確認是什麼Object被觸發:

因為只有ㄧ個Segue,所以有時需要知道是哪Object觸發的,這時可以設定Tag,然後再prepare()時判斷Object Tag,得知是哪個Object觸發,並進行相對應的處理。點選要設定的Object『如下圖示步驟1』之後,在Show The Attributes inspect『如下圖示步驟2』的View裡面設定Tag『如下圖示步驟3』。需要注意Object必須是繼承View才會有Tag

Press enter or click to view image in full size

程式則需要從performSegue()的第二個參數sender這邊傳送,將哪一個Object觸發的資訊透過sender傳遞給prepare()。

Press enter or click to view image in full size

然後在prepare()將傳入的sender轉型為對應的型別,如範例中是Button,所以需要轉型為UIButton(sender as? UIButton)。

Press enter or click to view image in full size

範例說明:

建立Page1ViewController.swift與Page2ViewController.swift兩個Controller,在Storyboard上點選Page1ViewController,按住滑鼠右鍵拖曳到Page2ViewController建立Segue,並將這個Segue ID設定為“ToPage2Segue”,最後點選Page1ViewController加入Navigation Controller。

Press enter or click to view image in full size

Step1:在Page1ViewController.swift的@IBAction按鍵內,利用performSegue()指定要透過哪個Segue去下一個畫面,並將傳入的sender傳遞到prepare()的sender。

Press enter or click to view image in full size

Step2:在Page1ViewController.swift的prepare()裡面指定下一個畫面的Controller,並將sender轉型為UIButton,然後更改下一個畫面的Controller的property。

Press enter or click to view image in full size

Step3:在Page2ViewController.swift的viewDidLoad()更新畫面,顯示是Button1還是Button2觸發顯示下一個畫面。

Press enter or click to view image in full size

--

--

Responses (1)