[Swift5]同じビュー内に違う値を持つPickerViewを2つ表示する方法
久々の更新、最近はiphoneのアプリ開発を勉強しています。
今日は、同一ビュー内に異なる値のPickerViewを表示したかったが
あまり、参考になるサイトが少なかったのでわかったことをメモしておく。
*あくまでメモなので参考程度に
まずは結果から
まずは、動作結果を動画にしてみた。
PickerViewの使い方は、以下のサイトがわかりやすかった。
ソースコード全体
今回作成した全体のソースを表示する。
今回は、ゲームの参加人数と制限時間をPickerViewにしてみた。
[swift]
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
}
}
[/swift]
ポイント
まず、viewDidLoadないでpickerviewの定義をする時に
tagを設定する、これが複数使用する時のポイントのようだ。
[swift]
joinnum_picker.delegate = self
joinnum_picker.dataSource = self
joinnum_picker.tag = 1
limitedtime_picker.delegate = self
limitedtime_picker.dataSource = self
limitedtime_picker.tag = 2
[/swift]
後は、複数定義をしたい所をtagごとに処理わけすれば問題なさそう
[swift]
//表示する配列の数
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]
}
}
[/swift]
さいごに
とりあえず、これで出来るがもっと最適解があるかはわからない
ディスカッション
コメント一覧
まだ、コメントがありません