同じ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つと増やすことも出来ます。
コメント