iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Mobile Development

ios前端開發學習系列 第 14

【Day14】認識如何使用 IBAction (以調色盤為例)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230830/20161850GxPjwt4Qdu.png

記得設定元件的 Connection 再來處裡的 Sent Events

// 當 switch 的狀態改變時,這個方法會被觸發
@IBAction func didChangeSwitchValue(_ sender: UISwitch) {
    // 更新顏色顯示視圖
    updateColorView()
    // 更新控制元件(尤其是 sliders)的狀態
    updateControls()
}

https://ithelp.ithome.com.tw/upload/images/20230830/20161850ijiaPwFcHg.png

// 當任何一個 slider 的值改變時,這個方法會被觸發
@IBAction func SliderChange(_ sender: UISlider) {
    var type: ColorType!  // 用於儲存顏色類型(紅、綠、藍)
    var textField: UITextField!  // 用於儲存對應的 textField

    // 根據觸發這個方法的 slider,設定顏色類型和對應的 textField
    switch sender {
    case redSlider:
        type = .red
        textField = redValue
    case greenSlider:
        type = .green
        textField = greenValue
    case blueSlider:
        type = .blue
        textField = blueValue
    default:
        break
    }

    // 獲取對應的顏色和 slider 值
    let color = type.color
    let value = sender.value

    // 更新 slider 和 textField 的狀態
    updateSliderAndTextField(slider: sender,
                             textField: textField,
                             value: value,
                             color: color)

    // 更新顯示的顏色
    updateColorView()
}

https://ithelp.ithome.com.tw/upload/images/20230830/201618508hvEIz9hc3.png

// 當 textField 中的文本改變時,這個方法會被觸發
@IBAction func TextChange(_ sender: UITextField) {
    // 更新所有顏色的 slider 和 textField
    textFieldDidEndEditing(redValue)
    textFieldDidEndEditing(greenValue)
    textFieldDidEndEditing(blueValue)

    // 更新顯示的顏色
    updateColorView()
}

前面事先讓大家能稍微明白個大概,接下來我們來仔細講解 IBAction 的用途

IBAction 通常會有三種表達方式:

  1. None: 這意味著 IBAction 方法不接受任何參數。它僅僅是一個在特定事件(例如按鈕點擊)觸發時會被調用的方法。
@IBAction func buttonClicked() {
    // 執行的內容
}
  1. Sender: 這是最常見的選項。當你選擇這個選項時,IBAction 方法會接受一個參數,這個參數是觸發這個方法的 UI 元件(例如 UIButton、UISlider 等)。這讓你可以根據這個 UI 元件的狀態或者屬性來執行不同的操作。
@IBAction func buttonClicked(_ sender: UIButton) {
    if sender.isSelected {
        // 執行的內容
    }
}
  1. Sender and Event: 除了上面提到的 sender 參數,這個選項還會傳遞一個 UIEvent 對象作為第二個參數。這個 UIEvent 對象包含了觸發這個 IBAction 的事件的詳細信息(例如觸摸事件的位置和時間等)。
@IBAction func buttonClicked(_ sender: any, forEvent event: UIEvent) {
    // 執行的內容
}

sender 要選擇 UI元件還是any?

  • 選擇用具體的 UI 元件類型(例如 UIButton, UISlider 等):如果你確定這個 IBAction 方法只會被一種類型的 UI 元件使用,選擇該具體類型會更好。
  • 選擇用 Any : 如果這個 IBAction 方法會被多種不同類型的 UI 元件使用,或者你希望保持更高的靈活性,則選擇 Any。

上一篇
【Day13】認識如何使用 viewDidLoad (以調色盤為例)
下一篇
【Day15】認識什麼是 self? Delegate? (以調色盤為例)
系列文
ios前端開發學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言