同じview内で複数の内容の異なるpickerViewを使用する

同じView内で異なる値を持ったpickerViewを使用する方法のメモです。

メソッドは一つしか定義出来ないので、tagを使用してpickerViewに表示する値やアクションを分けます。

import UIKit

class HomeViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource{

 @IBOutlet weak var rankPickerView: UIPickerView!
 @IBOutlet weak var pickerView: UIPickerView!

 //pickerViewに2021年〜2031年を指定
   let years = (2021...2031).map{ $0 }
 //ランキング
   let rank = ["金額","回数","個数"]

 override func viewDidLoad() {
   super.viewDidLoad()

 //デリゲート設定
   pickerView.dataSource = self
   pickerView.delegate = self
   rankPickerView.dataSource = self
   rankPickerView.delegate = self

 //ピッカーの列の数
 func numberOfComponents(in pickerView: UIPickerView) -> Int {
   1
 }

 //ピッカーの行の数
 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
   if pickerView.tag == 1{
     if component == 0 {
       return years.count
     }else{
       return 0
     }
   }else if pickerView.tag == 2{
     return rank.count
   }else if pickerView.tag == 3{
     return rank.count
   }else{
     return years.count
   }
 }

 //ピッカーに表示する値
 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
   if pickerView.tag == 1{
     return "\(years[row])年"
   }else if pickerView.tag == 2{
     return rank[row]
   }else{
     return "\(years[row])年"
   }
 }

 //ピッカーを選んだ時
 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
   if pickerView.tag == 1{
   //選んだ時にどうするか
   }else if pickerView.tag == 2{
    //選んだ時にどうするか
 }

}

ポイント① それぞれのpickerViewにtagを指定する

ポイント② デリゲート設定を忘れずに(これを忘れると反映されない)

ポイント③ メソッドは一つで、その中でtagを使用して表示などを分ける指示をする

以上で、同じView内で複数のPickerの使用が可能です。

同じ要領で3つ4つと増やすことも出来ます。

コメント

タイトルとURLをコピーしました