了解UIAlerController

在開發iOS應用程序時,用戶交互非常重要。要創建用於與用戶交互的彈出窗口,您需要使用UIAlerController。UIAlertController是一個視圖控制器,可以幫助您創建彈出窗口,包括警報框和操作表。本文將為您介紹UIAlertController的基本用法及其各種功能,幫助您創建各種彈出窗口。

一、創建警報框

警報框是在應用程序中顯示的一個彈出窗口,用於向用戶顯示重要信息或確認某些操作。下面的代碼將創建一個簡單的警報框,其中包括一個文本消息、一個標題以及一個OK按鈕。

// 創建警報框
let alertController = UIAlertController(
    title: "提示",
    message: "這是一條提示信息",
    preferredStyle: .alert)

// 添加確定按鈕
let okAction = UIAlertAction(
    title: "確定",
    style: .default,
    handler: nil)
alertController.addAction(okAction)

// 顯示警報框
self.present(alertController, animated: true, completion: nil)

在上面的代碼中,我們使用UIAlertController的init(title:message:preferredStyle:)方法來創建一個新的UIAlertController。preferredStyle參數指定了要創建的警報框或操作表的類型。在這種情況下,我們使用.alert樣式,這表示我們要創建一個警報框。我們還為UIAlertController添加了一個標題和一條消息。接下來,我們使用addAction(_ :)方法將一個名為「確定」的操作添加到UIAlertController中。這個操作沒有指定處理程序,因為它只是關閉警報框。

二、創建操作表

操作表用於向用戶顯示一組選項,它們可以執行不同的操作。下面的代碼將創建一個操作表,其中包括兩個選項:「選項1」和「選項2」,以及取消按鈕。

// 創建操作表
let alertController = UIAlertController(
    title: "選擇一項",
    message: "請選擇其中一項",
    preferredStyle: .actionSheet)

// 添加選項1
let option1Action = UIAlertAction(
    title: "選項1",
    style: .default,
    handler: {(alert: UIAlertAction!) -> Void in
        print("選擇了選項1")
})
alertController.addAction(option1Action)

// 添加選項2
let option2Action = UIAlertAction(
    title: "選項2",
    style: .default,
    handler: {(alert: UIAlertAction!) -> Void in
        print("選擇了選項2")
})
alertController.addAction(option2Action)

// 添加取消按鈕
let cancelAction = UIAlertAction(
    title: "取消",
    style: .cancel,
    handler: {(alert: UIAlertAction!) -> Void in
        print("取消")
})
alertController.addAction(cancelAction)

// 顯示操作表
self.present(alertController, animated: true, completion: nil)

在上面的代碼中,我們使用UIAlertController的alertController(title:message:preferredStyle:)方法來創建一個新的UIAlertController。這一次,我們使用.actionSheet樣式,這表示我們要創建一個操作表。我們還為UIAlertController添加了一個標題和一條消息。接下來,我們使用addAction(_ :)方法將名為「選項1」和「選項2」的操作添加到UIAlertController中。這兩個操作都具有處理程序,當用戶選擇其中一個選項時,將調用處理程序並執行相應的操作。最後,我們使用addAction(_ :)方法將一個名為「取消」的操作添加到UIAlertController中,以及樣式為.cancel,這將關閉操作表。

三、處理用戶輸入

創建警報框簡單,但是處理用戶在警報框中輸入數據更為複雜。下面的代碼將創建一個帶有文本欄位的警報框,以便用戶可以輸入一些文本。

// 創建警報框
let alertController = UIAlertController(
    title: "輸入一些文本",
    message: nil,
    preferredStyle: .alert)

// 添加文本框
alertController.addTextField(
    configurationHandler: {(textField: UITextField!) -> Void in
        textField.placeholder = "輸入一些文本"
    })

// 添加確定按鈕
let okAction = UIAlertAction(
    title: "確定",
    style: .default,
    handler: {(alert: UIAlertAction!) -> Void in
        let textField = alertController.textFields![0] as UITextField
        print("輸入的文本是:\(textField.text!)")
})
alertController.addAction(okAction)

// 顯示警報框
self.present(alertController, animated: true, completion: nil)

在上面的代碼中,我們首先創建一個帶有標題「輸入一些文本」的UIAlertController。然後,我們使用addTextField(configurationHandler:)方法向UIAlertController中添加文本欄位。這個方法需要一個閉包作為參數,這個閉包接受一個UITextField對象並用它來設置文本欄位的一些參數。在本例中,我們設置了文本欄位的佔位符文本。

接下來,我們使用addAction(_ :)方法將一個名為「確定」的操作添加到UIAlertController中。這個操作具有一個處理程序,當用戶點擊確定按鈕時,將調用處理程序並執行相應的操作。我們首先獲取文本欄位,並將其文本輸出到控制台,然後關閉警報框。最後,我們使用present(_:animated:completion:)方法顯示UIAlertController。

四、自定義行為

如果您需要更高級的行為,例如添加文本欄位、覆蓋默認方法或創建動態視圖,則可以使用UIAlerController的子類。下面的代碼將展示如何創建UIAlertController子類,並添加一個自定義視圖。

// 創建自定義警報框
class CustomAlertController: UIAlertController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // 創建自定義視圖
        let customView = UIView(frame: CGRect(x:0, y:0, width:270, height:150))
        customView.backgroundColor = UIColor.white

        // 添加標籤
        let label = UILabel(frame: CGRect(x:10, y:10, width:250, height:30))
        label.text = "這是一個自定義視圖"
        label.textColor = UIColor.black
        label.textAlignment = NSTextAlignment.center
        customView.addSubview(label)

        // 添加文本框
        let textField = UITextField(frame: CGRect(x:10, y:50, width:250, height:30))
        textField.placeholder = "請輸入一些文本"
        textField.borderStyle = UITextBorderStyle.roundedRect
        customView.addSubview(textField)

        // 添加按鈕
        let okButton = UIButton(type: .system)
        okButton.frame = CGRect(x: 100, y: 100, width: 70, height: 30)
        okButton.setTitle("確定", for: UIControl.State.normal)
        okButton.addTarget(
            self,
            action: #selector(CustomAlertController.okButtonTapped(_:)),
            for: UIControl.Event.touchUpInside)
        customView.addSubview(okButton)

        // 設置自定義視圖
        self.view.addSubview(customView)
    }

    @objc func okButtonTapped(_ sender: UIButton!) {
        let parent = self.presentingViewController
        self.dismiss(animated: true, completion: {() -> Void in
            let alertController = UIAlertController(
                title: "提示",
                message: "自定義視圖已關閉",
                preferredStyle: .alert)
            let okAction = UIAlertAction(
                title: "確定",
                style: .default,
                handler: nil)
            alertController.addAction(okAction)
            parent?.present(alertController, animated: true, completion: nil)
        })
    }
}

// 顯示自定義警報框
let customAlertController = CustomAlertController(
    title: nil,
    message: nil,
    preferredStyle: .alert)
self.present(
    customAlertController,
    animated: true,
    completion: {() -> Void in
        customAlertController.viewDidLoad()
    })

在上面的代碼中,我們創建了一個CustomAlertController類,它是UIAlertController的子類。我們將為自定義視圖創建一個自定義視圖,其中包括一個標籤、一個文本欄位和一個按鈕。該類包括一個名為「okButtonTapped:」的方法,該方法是「確定」按鈕的操作,用於關閉自定義警報框並創建另一個標準警報框。

最後,我們使用自定義警報框CustomAlertController來替換原來的警報框,將其顯示在屏幕上。我們使用UIViewController的present(_:animated:completion:)方法來顯示自定義警報框,並在顯示後調用viewDidLoad方法做一些額外的設置。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246683.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:16
下一篇 2024-12-12 13:16

發表回復

登錄後才能評論