[Swift5]同じビュー内に違う値を持つPickerViewを2つ表示する方法
久々の更新、最近はiphoneのアプリ開発を勉強しています。
今日は、同一ビュー内に異なる値のPickerViewを表示したかったが
あまり、参考になるサイトが少なかったのでわかったことをメモしておく。
*あくまでメモなので参考程度に
まずは結果から
まずは、動作結果を動画にしてみた。
PickerViewの使い方は、以下のサイトがわかりやすかった。
ソースコード全体
今回作成した全体のソースを表示する。
今回は、ゲームの参加人数と制限時間をPickerViewにしてみた。
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var joinnum_picker: UIPickerView!
@IBOutlet weak var limitedtime_picker: UIPickerView!
//参加人数
let JoinNum = ["4","5","6","7","8","9","10"]
//制限時間
let limitTime = ["3:00","5:00","7:00","10:00"]
//表示するリストの数
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
//表示する配列の数
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView.tag == 1{
return JoinNum.count
} else if pickerView.tag == 2{
return limitTime.count
} else {
return JoinNum.count
}
}
//データを返すメソッド
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView.tag == 1{
return JoinNum[row]
} else if pickerView.tag == 2{
return limitTime[row]
} else {
return JoinNum[row]
}
}
//データ選択時の呼び出しメソッド
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//pickerviewの設定、tagで表示内容を分ける
joinnum_picker.delegate = self
joinnum_picker.dataSource = self
joinnum_picker.tag = 1
limitedtime_picker.delegate = self
limitedtime_picker.dataSource = self
limitedtime_picker.tag = 2
}
}
ポイント
まず、viewDidLoadないでpickerviewの定義をする時に
tagを設定する、これが複数使用する時のポイントのようだ。
joinnum_picker.delegate = self
joinnum_picker.dataSource = self
joinnum_picker.tag = 1
limitedtime_picker.delegate = self
limitedtime_picker.dataSource = self
limitedtime_picker.tag = 2
後は、複数定義をしたい所をtagごとに処理わけすれば問題なさそう
//表示する配列の数
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView.tag == 1{
return JoinNum.count
} else if pickerView.tag == 2{
return limitTime.count
} else {
return JoinNum.count
}
}
//データを返すメソッド
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView.tag == 1{
return JoinNum[row]
} else if pickerView.tag == 2{
return limitTime[row]
} else {
return JoinNum[row]
}
}
さいごに
とりあえず、これで出来るがもっと最適解があるかはわからない

![[iPhone] UIPickerView の基本的な設定 | iOS アプリ開発](https://etolog.jp/wp-content/uploads/luxe-blogcard/2/2a69f9491fbc51d60af1eb71504fdc02.jpg)







ディスカッション
コメント一覧
まだ、コメントがありません