作業39#透過 present 顯示 iOS SDK 內建的 controller
練習內容:
今天練習用 present 顯示以下 controller:
- SFSafariViewController 顯示網頁
- UIActivityViewController 分享圖片與文字
- UIAlertController 警告訊息
- AVPlayerViewController 播放影片
- 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。
接著在 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 方式來顯示
- 用 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)
}
}
}
title 顯示主要訊息,message 顯示次要資訊或說明,參數 preferredStyle 傳入 .alert 將顯示從中間彈出的視窗有兩種可以選擇(alert/actionSheet)。
- 另外UIAlertAction 的參數 style 控制按鈕文字的顏色有基本的三種
- .default 預設樣式(是藍色)
- .cancel 取消變更,保留原樣(按鈕的字是粗體)(是藍色)
3. .destructive 確定變更或刪除資料 (按鈕的字是紅字)
從 UIAlertController 的 view.tintColor 也可以調整 default 與 .cancel 的顏色:
controller.view.tintColor = .green
🎉用 actionSheet 顯示選單
參考文章