一個選擇器視圖顯示一個或多個轉輪,用戶可以操控這些轉輪來選擇項目。每個轉輪(稱為組件)都有一系列代表可選項目的索引行。每行顯示一個字串或視圖,以便用戶可以識別該行上的項目。用戶通過將轉輪旋轉到所需的值(與選擇指示器對齊)來選擇項目。
使用選取器數據源(採用 UIPickerViewDataSource
協定的物件)提供要在選取器視圖中顯示的數據。使用選擇器視圖委任(採用 UIPickerViewDelegate
協定的物件)來提供用於顯示數據和響應用戶選擇的視圖。
先使 ViewController
採用 UIPickerViewDataSource
協定和 UIPickerViewDelegate
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
let originList = [
"", "台北","板橋","桃園","新竹"]
let finalList = [
"", "台中","嘉義","台南", "左營"]
var selectedOrigin = ""
var selectedFinal = ""
}
在 viewDidLoad 中加入 delegate 及 datasource 設定,及 pickerView 屬性設定
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate = self
pickerView.dataSource = self
}
使用方法 numberOfComponents(in:)
設定 PickView 的轉輪數目為 2
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
使用方法 pickerView(_:, numberOfRowsInComponent:)
分別設定第一個和第二個轉輪顯示的個數
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
// 第一個轉輪的 component 為 0
if component == 0 {
return originList.count
}
return finalList.count
}
使用方法 pickerView(_: UIPickerView, titleForRow: Int, forComponent: Int)
將數組的值放入轉輪中
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return originList[row]
}
return finalList[row]
}
使用方法 pickerView(_: UIPickerView, didSelectRow: Int, inComponent: Int)
,選定兩個轉輪的值後輸出
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
selectedOrigin = originList[row]
} else {
selectedFinal = finalList[row]
}
if selectedOrigin != "" && selectedFinal != "" {
print("Start from: \(selectedOrigin). End at: \(selectedFinal).")
}
}
// Prints "Start from: 板橋. End at: 左營."