作業39#透過 present 顯示 iOS SDK 內建的 controller

練習內容:

今天練習用 present 顯示以下 controller:

  1. SFSafariViewController 顯示網頁
  2. UIActivityViewController 分享圖片與文字
  3. UIAlertController 警告訊息
  4. AVPlayerViewController 播放影片
  5. UIReferenceLibraryViewController 查詢單字

SFSafariViewController

看到Safari,就知道是顯示網頁的 controller。

import UIKit
import SafariServices //顯示網頁必輸入 SafariServices


class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}


@IBAction func Button(_ sender: UIButton) {
if let url = URL(string: "https://medium.com/@timmyliu_98815") {
let controller = SFSafariViewController(url: url)
present(controller, animated: true, completion: nil)
}

}

}

點一下按鈕出現網址

一載完就會跳到網頁

UIActivityViewController

可以分享圖片與文字。(實機中才會出現 FB 或 LINE 選項)

程式

參數 activityItems array 裡東西的型別決定分享的內容

比方字串是分享文字

UIImage 是分享圖片

URL 是分享網頁

注意

一. 將圖片存到手機相簿要在 App 的 Info 頁面設定 Privacy NSPhotoLibraryAddUsageDescription。

點+號後選擇 Privacy — Photo Library Additions Usage Description

接著在 value 欄輸入給使用者的訊息文字:

參考:

二. 是 iPad 要注意的。在 iPad 顯示 UIActivityViewController 時必須設定彈出框顯示的位置,否則會造成 App 閃退。因此要設定 sourceView 來指定顯示位置:

@IBAction func Button(_ sender: UIButton) {
let controller = UIActivityViewController(activityItems: ["Timmy 的 Medium", UIImage(named: "supreme")!, URL(string: "https://medium.com/@timmyliu_98815")!], applicationActivities: nil)
controller.popoverPresentationController?.sourceView = sender
present(controller, animated: true, completion: nil)
}

參考:

分享圖片後儲存:

分享文字與網址:

將網址存到 Reading List:

UIAlertController

UIAlertController 會跳出警告、或是徵求是否同意的視窗也可以是選單的方式。

參考:

分別練習用 3 種不同的 alert controller 方式來顯示

  1. 用 alert style顯示從中間彈出的訊息視窗。

2.用 actionSheet 顯示由下而上彈出的選單視窗,提供一些可點選的選項。

3.加入 text field 顯示可以讓使用者輸入資訊的視窗。

🎉用 alert style 顯示彈窗

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var textField: UITextField!


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}

@IBAction func Button(_ sender: UIButton) {
if textField.text?.isEmpty == true {
let controller = UIAlertController(title: "有資料沒有填寫完整", message: "請再次確認", preferredStyle: .alert)
let okAction = UIAlertAction(title: "好", style: .default)
controller.addAction(okAction)
present(controller, animated: true)
}

}
}
textField內如果沒東西,按下button 會出現視窗提示,裡面文字內容都可自己設定

title 顯示主要訊息,message 顯示次要資訊或說明,參數 preferredStyle 傳入 .alert 將顯示從中間彈出的視窗有兩種可以選擇(alert/actionSheet)。

  • 另外UIAlertAction 的參數 style 控制按鈕文字的顏色有基本的三種
  1. .default 預設樣式(是藍色)
  2. .cancel 取消變更,保留原樣(按鈕的字是粗體)(是藍色)

3. .destructive 確定變更或刪除資料 (按鈕的字是紅字)

從 UIAlertController 的 view.tintColor 也可以調整 default 與 .cancel 的顏色:

controller.view.tintColor = .green

🎉用 actionSheet 顯示選單

參考文章

--

--