UIPickerView
はじめに
徐々にアプリっぽくなってきた
実行環境
- swift : 4.2.1
- Xcode : 10.1
ソースコード
import UIKit class SetTime: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { // 選択肢 let dataListSec = Array(0...59) let dataListMin = Array(0...59) let dataListHour = Array(0...8) @IBOutlet weak var picker: UIPickerView! override func viewDidLoad() { super.viewDidLoad() // プロトコル // storyboardからcontrolでViewの黄色いとこに接続すれば下の二つは記述しなくてもおkっぽい //picker.delegate = self //picker.dataSource = self // 表示する項目を指定 self.picker.selectRow(1, inComponent: 0, animated: true) // hour self.picker.selectRow(0, inComponent: 1, animated: true) // min self.picker.selectRow(0, inComponent: 2, animated: true) // sec } // UIPickerViewDataSource func numberOfComponents(in pickerView: UIPickerView) -> Int { // 表示する列数 return 3 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { // アイテム表示個数を返す if component == 0 { return dataListHour.count } if component == 1 { return dataListMin.count } else { return dataListSec.count } } // UIPickerViewDelegate func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { // 表示する文字列を返す if component == 0 { return String(dataListHour[row]) } if component == 1 { return String(dataListMin[row]) } else { return String(dataListSec[row]) } } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { // 選択時の処理 if component == 0 { // hour print(dataListHour[row]) } if component == 1 { // min print(dataListMin[row]) } else { // sec print(dataListSec[row]) } } }
storyboard
- UIPickerとUILabelを配置
- UIPickerはcontrol接続でstoryboardの上の黄色い丸のとこにやると、delegate, datasourceの記述を省けた。
- UIPicker Outlet接続
commandクリックで記述すべきメソッドを確認
選択時の処理
- func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
ここで選択した時間を取得して、セグエで値渡しできそう。んで遷移後カウントダウン。
課題
- AutoLayout問題
思ったこと
コマンドクリック便利