質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

12935閲覧

Swift3でボタンをタップした時にPickerViewをしたから出す方法

P-san

総合スコア21

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

2クリップ

投稿2016/11/01 05:44

###前提・実現したいこと
タイトル通りなのですが、ボタンをタップした時にピッカーが下から出てくるようにしたいです。

TextFieldをタップした時にピッカーが下から出るようには以下のコードでできました。

これをBar Button Itemをタップした時にピッカーが出るようにしたいです。
可能でしょうか?

よろしくお願いします。

###該当のソースコード

swift

1 2// picker配列の作成 3 var pickerArray: NSArray = ["楽天", "ソニー", "APPLE", "amazon", "softbank"] 4 var TextField: UITextField! 5 var PickerView: UIPickerView! 6 var ToolBar: UIToolbar! 7 8 9override func viewDidLoad() { 10 super.viewDidLoad() 11 12 // pickerView作成 13 PickerView = UIPickerView() 14 PickerView.showsSelectionIndicator = true 15 PickerView.delegate = self 16 17 // TextField作成 18 TextField = UITextField(frame: CGRect(x: 50, y: 350, width: 320, height: 50)) 19 TextField.placeholder = filteringArr[0] as? String 20 self.view.addSubview(TextField) 21 22 23 // pickerが下から出てくるToolbarの作成 24 ToolBar = UIToolbar(frame: CGRect(x: 0, y: self.view.frame.size.height/6, width: self.view.frame.size.width, height: 40.0)) 25 ToolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0) 26 ToolBar.backgroundColor = UIColor.black 27 ToolBar.barStyle = UIBarStyle.black 28 ToolBar.tintColor = UIColor.white 29 30 // ToolBarを閉じるボタンを追加 31 let ToolBarButton = UIBarButtonItem(title: "完了", style: .done, target: self, action: Selector(("onClick"))) 32 ToolBarButton.tag = 1 33 ToolBar.items = [ToolBarButton] 34 35 // 並べ替えボタンをpickerviewとToolBarに関連付け 36// barButtonFilter. 37 38 TextField.inputView = PickerView 39 TextField.inputAccessoryView = ToolBar 40 41 42 } 43 44 // このbarButtonFilterをタップ後にピッカーを出るようにしたい。 45 @IBAction func barButton(_ sender: AnyObject) { 46 47// ここに処理を書く? 48 49 } 50

###補足情報(言語/FW/ツール等のバージョンなど)
swift3
xcode8.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

参考URL : SWIFTにUITextFieldのためのinputviewとしてUIPickerview

以下のようにするのはいかがでしょう、参考にしてください。

swift

1import UIKit 2 3class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 4 5 @IBOutlet weak var textField: UITextField! 6 let pickerView = UIPickerView() 7 8 var array = ["楽天", "ソニー", "APPLE", "amazon", "softbank"] 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 pickerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: pickerView.bounds.size.height) 14 pickerView.delegate = self 15 pickerView.dataSource = self 16 17 let vi = UIView(frame: pickerView.bounds) 18 vi.backgroundColor = UIColor.white 19 vi.addSubview(pickerView) 20 21 textField.inputView = vi 22 23 let toolBar = UIToolbar() 24 toolBar.barStyle = UIBarStyle.default 25 toolBar.isTranslucent = true 26 toolBar.tintColor = UIColor.black 27 let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewController.donePressed)) 28 let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.cancelPressed)) 29 let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 30 toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 31 toolBar.isUserInteractionEnabled = true 32 toolBar.sizeToFit() 33 textField.inputAccessoryView = toolBar 34 } 35 36 // Done 37 func donePressed() { 38 view.endEditing(true) 39 } 40 41 // Cancel 42 func cancelPressed() { 43 textField.text = "" 44 view.endEditing(true) 45 } 46 47 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 48 return array[row] 49 } 50 51 func numberOfComponents(in pickerView: UIPickerView) -> Int { 52 return 1 53 } 54 55 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 56 return array.count 57 } 58 59 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 60 textField.text = array[row] 61 } 62}

投稿2016/11/01 13:21

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

P-san

2016/11/02 06:18

うまく表示することが出来ました。 ありがとうございます。
AtsushiNakamura

2019/10/14 07:17

buttonのタップでpicker出せないです。。。 みなさんどのようにして下からpicker出しているのでしょうか?
_Kentarou

2019/10/22 00:40 編集

@AtsushiNakamura こちらは、ButtonのタップではなくてTextFieldへのフォーカスを契機にPickerが出るやり方です。 Buttonを押して実現したい場合でも、ボタン押下時にTextFieldにフーカスをあてPickerを出す方法になると思います。
AtsushiNakamura

2019/10/28 02:04

@_Kentarou なるほど、ボタン押下時にTextFieldにフーカスをあてるやり方でやられてるですね、試してみます ありがとうございます。
guest

0

違う質問の答えを書いてしまいました。

投稿2019/08/16 18:23

編集2019/08/16 18:24
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問