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

一般來說最簡的方式是在Storyboard上拉segue到下一個畫面(藍色的線條),然而很多情況會拉一堆segue,而由程式去觸發則可以只拉一個segue或是不用segue,而什麼情況會無法拉segue,如使用第三方建立的Controller畫面。用程式觸發還可以依照不同的狀況去不同的畫面(Controller)。

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

由程式生成Controller,再進入生成的Controller畫面,有些畫面可能有多Controller都會進入,所以可以由程式生成,而不用拉很多條Segue。

Step1:必須要設定Storyboard ID,而且這必須是唯一的,因為要從程式指定Storyboard ID產生對應的Controller,才能到這畫面。在Storyboard點選該畫面的View Controller,則可在Show The Identity Inspector內的Inspector設定Storyboard ID。

Step2:從程式產生Storyboard上的Controller,利用storyboard?.instantiateViewController()產生Controller

instantiateViewController(),主要有一個參數,分敘如下:

  • identifier: 就是要生成的Storyboard ID。Storyboard ID必須輸入正確,若是錯誤會Crash。如果在第一個Storyboard傳入第二個Storyboard裡Storyboard ID,也是會找不到而Crash。

Step3:呼叫present()顯示Controller畫面,透過present()顯示畫面與segue設定present modally的一樣效果,新建立的畫面會完全覆蓋之前的⾴面,如蓋住Tab Bar或Navigation Bar,讓之前的畫面無法操作。

present(),主要有三個參數,分敘如下:

  • viewControllerToPresent:哪一個Controller要顯示。
  • flag:是否需要動畫效果。
  • completion:顯示新的畫面完成後,completion的程式會被執行,因為是Optional,如果不做任何動作,可以傳入nil,甚至可以忽略completion。

不建立Segue的方式返回上一個畫面:

使用dismiss()可以返回之前由呼叫present()顯示這個畫面的Controller,當 Controller呼叫 dismiss()時,如果呼叫dismiss()的Controller有present()其他的Controller,則會移除這Controller所呼叫present()的Controller。如果沒有,則會把呼叫dismiss()的Controller 移除,並回到之前呼叫這個Controller的Controller。例如Page1呼叫present()顯示Page2,Page2呼叫present()顯示Page3,在Page1呼叫dismiss(),會移除Page2與Page3。在Page2呼叫dismiss(),則是Page3會被移除。在Page3呼叫dismiss()則就移除Page3。

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

  • flag:是否需要動畫效果。
  • completion:顯示新的畫面完成後,completion的程式會被執行,因為是Optional,如果不做任何動作,可以傳入nil,甚至可以忽略completion。

範例說明:

建立Page1ViewController.swift與Page2ViewController.swift兩個Controller,在Page1ViewController設定Storyboard ID為Page1,Page2ViewController設定Storyboard ID為Page2。

Step1:在Page1ViewController.swift裡的@IBAction按鍵內,利用instantiateViewController()生成Page2的Controller,並且用present()顯示畫面。

如需要傳送資料,則Controller後可以加上as? controller,使用Property來傳遞資料。

Step2:在Page2ViewController.swift裡的@IBAction Back按鍵內,利用dismiss()返回前一頁。

present()除了可以呼叫自己所寫的畫面,也可以呼叫第三方或是IOS SDK所提供的畫面,下面介紹一下IOS SDK內建的Frameworks所提供的分享功能畫面。

iOS SDK內建了App分享功能,讓開發者可以快速完成分享圖片與文字。但是如果要在 App 中加入進階的功能或是未支援的分享App,那就需要進一步搭配官方提供的 SDK才有辦法達成。除了內建的分享選項,還能夠使用其他的功能,像是AirDrop、Message、Mail與Save Image等等…。

需要注意的是有些功能必須在實際的設備上執行才看得到,因為需要安裝對應的App才能看到,而且在執行此功能之前,必須先在設備上安裝的App先登入帳號,如想在Facebook上分享,那就必須先安裝Facebook App並且登入。

透過IOS SDK內建的UIActivityViewController()可以簡單快速的完成分享功能。

主要是使用UIActivityViewController來建立,主要有兩個參數,分敘如下:

  • [Any]:所要分享的資料,圖片或字串。
  • [UIActivity]?:填入nil即可。

範例說明:

在Page2 View Controller上新增一個Share的Button。

Step1:在Page2ViewController.swift裡的@IBAction Share按鍵內,呼叫UIActivityViewController()傳送要分享的連結與圖片。

分享到Facebook的結果如下:

--

--