SwiftUI Button 按鈕教學
Button 是使用者與 App 互動最核心的元件。在 SwiftUI 中,建立一個按鈕並處理點擊事件是非常直觀的。
基礎語法
建立一個 Button 最基本的兩個部分是:Action (點擊後做什麼) 和 Label (按鈕長什麼樣子)。
Button {
print("按鈕被點擊了!")
} label: {
Text("點我")
}
如果按鈕只包含簡單的文字,還有更簡潔的寫法:
Button("點我") {
print("按鈕被點擊了!")
}
這裡的語法使用了 Swift 的閉包 (Closure)。
按鈕樣式 (Button Style)
SwiftUI 提供了多種內建的按鈕樣式,讓你快速改變按鈕的外觀。
Button("雖然我是按鈕,但我長得像文字") { }
.buttonStyle(.automatic) // 預設
Button("我是顯眼的按鈕") { }
.buttonStyle(.borderedProminent) // 填充顏色的按鈕 (iOS 15+)
.tint(.green) // 改變填充顏色
Button("我是有邊框的按鈕") { }
.buttonStyle(.bordered) // 只有灰色背景/邊框 (iOS 15+)
Button("我是無邊框按鈕") { }
.buttonStyle(.borderless)
自定義按鈕外觀
你可以完全控制按鈕的外觀。label 閉包中可以是任何 View,這意味著你可以放入圖片、堆疊或是複雜的佈局。
Button {
// Action
} label: {
HStack {
Image(systemName: "trash")
Text("刪除")
}
.font(.headline)
.padding()
.foregroundColor(.white)
.background(.red)
.cornerRadius(10)
}
這段程式碼會建立一個紅色背景、圓角、帶有垃圾桶圖示和文字的自定義按鈕。
按鈕的角色 (Button Role)
在 iOS 15 之後,我們可以指定按鈕的角色 (Role),系統會自動根據角色賦予適當的語意樣式(例如刪除按鈕會自動變紅)。
Button("刪除", role: .destructive) {
// 執行刪除動作
}
.buttonStyle(.borderedProminent) // 加上這個樣式後,背景會自動變紅
Button("取消", role: .cancel) {
// 執行取消動作
}
禁用按鈕 (Disabled)
你可以透過 .disabled() 修飾符來控制按鈕是否可以被點擊。
Button("送出") {
// submit
}
.disabled(true) // 按鈕會變灰且無法點擊
通常我們會配合狀態變數 (State) 來使用:
@State private var isLoading = false
Button("登入") {
isLoading = true
// login...
}
.disabled(isLoading) // 載入中時禁用按鈕
學會了 Button,我們就開啟了互動的大門。接下來,我們需要學習如何將這些元件整齊地排列在畫面上,這就是 版面佈局 (Layout) 的學問了。