iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
自我挑戰組

iOS 新手開發的大小事系列 第 20

Day 20: [UIKit] UIPickerView 介紹

  • 分享至 

  • xImage
  •  

概觀

一個選擇器視圖顯示一個或多個轉輪,用戶可以操控這些轉輪來選擇項目。每個轉輪(稱為組件)都有一系列代表可選項目的索引行。每行顯示一個字串或視圖,以便用戶可以識別該行上的項目。用戶通過將轉輪旋轉到所需的值(與選擇指示器對齊)來選擇項目。

使用選取器數據源(採用 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: 左營."


上一篇
Day 19: [UIKit] UITextField 介紹
下一篇
Day 21: [UIKit] UITableView 介紹 -1
系列文
iOS 新手開發的大小事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言