
iphoneやiPadで、決められた内容から選択して、入力する際、クルクル回転するピッカービュー(ドラムロール)は便利ですよね。今回は、ピッカービューのプログラムの使い方をご紹介したいと思います。
目次
完成形のイメージ
今回ご紹介するコードで出来上がった完成形を動画にしました。また、全コードは、ページの最後に載せています。
1. ストーリーボードにパーツを準備
まず、ストーリーボードに【UILabel】【UIPickerView】【Button】を配置して下さい。そして、それぞれをコードにつなぎます。
【Button】をタップすると、pickerViewが表示されるだけのコードを記述しています。

    @IBOutlet weak var label: UILabel!
    
    @IBOutlet weak var pickerView: UIPickerView!
    @IBAction func button(_ sender: Any) {
        
        pickerView.isHidden = false
    }
2. デリゲートとデータソース
- classにデリゲート(UIPickerViewDelegate)とデータソース(UIPickerViewDataSource)を記述し、vewDidLoadにselfで指定して下さい。
- pickerViewに表示したい内容を、dateList内に配列として記述します。
- label.text = “1.0” で、Labelの初期値を1.0と指定しています。
- buttonをタップするとpickerVIewが表示されるようにしたいので、最初はpickerView.isHidden = true として、非表示にします。
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    
    @IBOutlet weak var label: UILabel!
    
    @IBOutlet weak var pickerView: UIPickerView!
    
    let dataList = [
        "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0"
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.delegate = self
        pickerView.dataSource = self
        label.layer.zPosition = 1
        
        label.text = "1.0"
        pickerView.isHidden = true
    }
3. PickerViewの列の数を指定
1列を指定しています。
  func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }4. PickerViewの行数を指定
行数は、dataListの個数分欲しいので、dateListのcount分を指定しています。
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return dataList.count
    }
5. 表示する内容を指定
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return dataList[row]
    }
6. 処理の指定
PickerViewによって行を選択すると、呼び出されるメソッド。dataListのrow番目の値をlabel.textに反映し、その後、pickerViewを非表示にしています。
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        label.text = dataList[row]
        pickerView.isHidden = true
    }
7. 画面タップでピッカービューを閉じる。
touchesBeganは便利なメソッドです。画面をタップすると、{ }カッコ内のコードが実行されます。今回は、画面をタップすると、pickerViewを非表示にするコードを記述しています。
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        pickerView.isHidden = true
        
    }
全コード
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    
    @IBOutlet weak var label: UILabel!
    
    @IBOutlet weak var pickerView: UIPickerView!
    
    let dataList = [
        "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0"
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        pickerView.delegate = self
        pickerView.dataSource = self
        label.layer.zPosition = 1
        
        label.text = "1.0"
        pickerView.isHidden = true
    }
    
    
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return dataList.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return dataList[row]
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        label.text = dataList[row]
        pickerView.isHidden = true
    }
    @IBAction func button(_ sender: Any) {
        
        pickerView.isHidden = false
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        pickerView.isHidden = true
        
    }
    
}
