前提・実現したいこと
・PickerViewにDoneボタンを実装し、タップしたらPickerが閉じる仕様にしたい
・PickerView以外をタップしたらPickerが閉じる仕様にしたい
現状、
ピッカーを選択したら、
選択したものがラベルに表示されるようになっています。
該当のソースコード
swift
1import UIKit 2 3class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 4 5 @IBOutlet weak var tapLabel: UILabel! 6 @IBOutlet weak var label: UILabel! 7 @IBOutlet weak var pickerView: UIPickerView! 8 9 let dataList = [ 10 "Mickey Mouse","Minnie Mouse","Donald Duck","Goofy","Pluto"] 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Delegate設定 15 pickerView.delegate = self 16 pickerView.dataSource = self 17 // label初期表示 18 label.text = "Disney\nBig5" 19 // labelの高さを可変にする 20 label.sizeToFit() 21 // pickerを初期表示は隠す 22 pickerView.isHidden = true; 23 24 } 25 26 override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){ 27 print("touched") 28 //myLabelはタッチ判定をしたいUILabel 29 if touchedLabel(touches: touches,view:label){ 30 print("PikcerView表示") 31 pickerView.isHidden = false; 32 return 33 } 34 } 35 36 //タッチしたビューと指定したビューが一致した時、trueが返る 37 func touchedLabel(touches: Set<UITouch>, view:UILabel)->Bool{ 38 //全指のタッチについて処理 39 for touch: AnyObject in touches { 40 let t: UITouch = touch as! UITouch 41 if t.view?.tag == view.tag { 42 return true 43 } else { 44 return false 45 } 46 } 47 return false 48 } 49 50 // UIPickerViewの列の数 51 func numberOfComponents(in pickerView: UIPickerView) -> Int { 52 return 1 53 } 54 55 // UIPickerViewの行数、リストの数 56 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 57 // dataListの数 58 return dataList.count 59 } 60 61 // UIPickerViewの最初の表示 62 func pickerView(_ pickerView: UIPickerView, 63 titleForRow row: Int, 64 forComponent component: Int) -> String? { 65 return dataList[row] 66 } 67 68 // UIPickerViewのRowが選択された時の挙動 69 func pickerView(_ pickerView: UIPickerView, 70 didSelectRow row: Int, 71 inComponent component: Int) { 72 label.text = dataList[row] 73 } 74 75}
試したこと
以下のサイトでUITextField 入力後に、入力欄外やキーボード以外の画面をタップしてソフトウェアキーボードを非表示にする方法について書いてあったので、それを活用してPickerも可能かと思い、「override func touchesBegan」の中にview.endEditing(true)を書いてみたもののできず。。
【Swift】UITextField入力後に画面をタップしてキーボードを非表示にする
以下のサイトを参考に、
Pickerにボタンを実装しようとしたのですが、
なかなか上手くいかず困っています。。
【swift】UIPickerViewを作ってみる(ドラムロール)
stackoverflow
■追記
ご指示通り修正したものの、何かが指示通りにできていないのかエラーが出てしまいます。
error内容:Thread 1: Exception: "-[UILabel setInputView:]: unrecognized selector sent to instance 0x7f9635411bf0"
回答1件
あなたの回答
tips
プレビュー