Skip to content

Instantly share code, notes, and snippets.

@toruuetani
Created April 14, 2016 07:31
Show Gist options
  • Save toruuetani/aaaef24f3dc9493a9f922a0098cc439a to your computer and use it in GitHub Desktop.
Save toruuetani/aaaef24f3dc9493a9f922a0098cc439a to your computer and use it in GitHub Desktop.
UITextField でキーボードの代わりに UIPickerView を表示
class TestViewController: UIViewController {
private var pickerView: UIPickerView!
private var pickerViewToolbar: UIToolbar!
private var pickerViewSelectedRow: Int?
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewDidLoad() {
super.viewDidLoad()
self.setupPickerView()
self.setupPickerViewToolbar()
self.setupTextFieldWithPickerView(self.powerField)
}
}
extension TestViewController {
func pickerCancel() {
self.view.endEditing(true)
}
func pickerDone() {
//TODO: 選択された値を外部に反映
self.view.endEditing(true)
}
private func setupPickerView() {
self.pickerView = UIPickerView()
self.pickerView.dataSource = self
self.pickerView.delegate = self
}
private func setupPickerViewToolbar() {
self.pickerViewToolbar = UIToolbar(frame: CGRectMake(0, 0, 0, 35))
let done = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: #selector(TestViewController.pickerDone))
let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
let cancel = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: #selector(TestViewController.pickerCancel))
self.pickerViewToolbar.setItems([cancel, space, done], animated: true)
}
private func setupTextFieldWithPickerView(target: UITextField) {
target.inputView = self.pickerView
target.inputAccessoryView = self.pickerViewToolbar
target.delegate = self
}
}
extension TestViewController: UIPickerViewDataSource {
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return self.candidates.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return self.candidates[row]
}
}
extension TestViewController: UIPickerViewDelegate {
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.pickerViewSelectedRow = row
}
}
extension TestViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
// TextField 選択時に UIPickerView の選択値を変更する
self.pickerView.selectRow(self.pickerViewSelectedRow ?? 0, inComponent: 0, animated: true)
return true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment