按鈕 UIButton

按鈕是最常見的控制元件,按下按鈕後可以執行許多動作,例如送出表單、切換頁面等等,應用程式的互動幾乎都與 UIButton 有關,是不可缺少的元件。本節的目標如下:

uibutton01

首先在 Xcode 裡,新建一個 Single View Application 類型的專案,取名為 ExUIButton 。

一開始先在viewDidLoad()中設置self.view的底色,以供後續使用,如下:

// 為基底的 self.view 設置底色
self.view.backgroundColor = UIColor.white

建立預設樣式的按鈕

UIKit 提供幾個內建預設樣式的按鈕,都是系統中可以看得到的樣式,如果你有一樣的需求,可以直接使用這樣的方式建立按鈕,如下:

// 預設的按鈕樣式
var myButton = UIButton(type: .contactAdd)
myButton.center = CGPoint(
  x: fullScreenSize.width * 0.4,
  y: fullScreenSize.height * 0.2)
self.view.addSubview(myButton)

myButton = UIButton(type: .infoLight)
myButton.center = CGPoint(
  x: fullScreenSize.width * 0.6,
  y: fullScreenSize.height * 0.2)
self.view.addSubview(myButton)

上述程式分別建立了加號+及驚嘆號!的按鈕(請參考上圖),這邊可以注意到,這兩個按鈕用的是同一個變數myButton,因為各別都使用了UIButton(type:)來初始化一個按鈕,所以可以這樣使用。當然你也可以分別建立兩個常數(像是let myButton1, myButton2這樣)。

建立自定義的按鈕

如果要建立自定義的按鈕,則是使用UIButton(frame:),如下:

// 使用 UIButton(frame:) 建立一個 UIButton
myButton = UIButton(
  frame: CGRect(x: 0, y: 0, width: 100, height: 30))

// 按鈕文字
myButton.setTitle("按我", for: .normal)

// 按鈕文字顏色
myButton.setTitleColor(UIColor.white, for: .normal)

// 按鈕是否可以使用
myButton.isEnabled = true

// 按鈕背景顏色
myButton.backgroundColor = UIColor.darkGray

// 按鈕按下後的動作
myButton.addTarget(
    nil, 
    action: #selector(ViewController.clickButton),
    for: .touchUpInside)

// 設置位置並加入畫面
myButton.center = CGPoint(
    x: fullScreenSize.width * 0.5,
    y: fullScreenSize.height * 0.5)
self.view.addSubview(myButton)

上述程式要注意到的是addTarget(target:, action:, for:)這個方法,用來負責按下按鈕後的動作,這是由 UIControl 所提供的方法,再繼承給 UIButton。這個方法的參數說明如下:

  • target:當事件發生時,要呼叫哪一個物件(設成 nil 時則是會依據視圖逐層往上找)。
  • action:呼叫的物件要執行的方法,以#selector()來指定,ViewController.clickButton指的就是ViewController類別的clickButton方法。將ViewController省略掉,只填入clickButton也可以。
  • for:觸發的事件。(這裡則是按下事件。)
Hint
  • 觸控事件是由 UIControl 所負責的動作。 UIControl 是繼承自 UIView 的子類別,而這些需要觸控事件的元件則是再繼承自 UIControl ,除了 UIButton 之外,還有像是往後會學習到的 UISwitch、UISlider 都是。
  • #selector()也可以填入需要參數的方法,像是clickButton(_:)或是clickButton(_:otherSender:),請再另外定義這兩個不同的方法。請記得方法(以及函式)就算名稱一樣,參數不同的話也是代表不同的方法。更多函式說明請參考函式章節。

接著則是為ViewController新增按下按鈕需要的方法clickButton(),如下:

@objc func clickButton() {
    // 為基底的 self.view 的底色在黑色與白色兩者間切換
    if self.view.backgroundColor!.isEqual(
      UIColor.white) {
        self.view.backgroundColor = UIColor.black
    } else {
        self.view.backgroundColor = UIColor.white
    }
}
Hint

範例

本節範例程式碼放在 uikit/uibutton

results matching ""

    No results matching ""