昔の記事UIPickerViewも下から出す。 | iPhoneアプリ備忘録のSwift3版かな?
参考サイト
011 UIPickerViewで値の選択 · GitBook
閉じるボタンは前回の記事参照。
import UIKit class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource { // UIPickerView. private var myUIPicker: UIPickerView! // 表示する値の配列. private let myValues: NSArray = ["その一","その二","その三","その四"] //テキストフィールドを作ってoutlet接続 @IBOutlet weak var testTextField: UITextField! override func viewDidLoad() { super.viewDidLoad() // UIPickerViewを生成. myUIPicker = UIPickerView() // Delegateを設定する. myUIPicker.delegate = self // DataSourceを設定する. myUIPicker.dataSource = self // testTextFieldのdelegateを設定する。 testTextField.delegate = self // 閉じるボタンのツールバー生成 let kbToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 40)) kbToolBar.barStyle = UIBarStyle.default // スタイルを設定 kbToolBar.sizeToFit() // 画面幅に合わせてサイズを変更 // スペーサー let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil) // 閉じるボタン let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(ViewController.commitButtonTapped)) kbToolBar.items = [spacer, commitButton] testTextField.inputView = myUIPicker testTextField.inputAccessoryView = kbToolBar } //閉じるボタンが押されたらキーボードを閉じる func commitButtonTapped (){ self.view.endEditing(true) } //PickerViewのコンポーネント(縦)の数を決めるメソッド(実装必須) func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } //pickerに表示する行数(横)を返すデータソースメソッド.(実装必須) func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return myValues.count } //pickerに表示する値を返すデリゲートメソッド. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return myValues[row] as? String } //pickerが選択された際に呼ばれるデリゲートメソッド. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { testTextField.text = "\(myValues[row])" print("row: \(row)") print("value: \(myValues[row])") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
あちこちからのコピペがまるわかり。(^_^;)
一応こんな感じで。