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

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

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

HTMLで用いる<button>タグです。

Xcode

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

Swift

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

Q&A

解決済

1回答

8042閲覧

[Swift][Xcode]Pickerをボタンから起動させる方法

moe_1023

総合スコア11

button

HTMLで用いる<button>タグです。

Xcode

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

Swift

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

0グッド

1クリップ

投稿2018/05/01 06:39

編集2018/05/02 09:07

前提・実現したいこと

こんにちは。Swiftでアプリケーションを作成しています。

画像上のボタンを押すと、下からピッカーが出てきて、ピッカーを選択すると、ラベルに対して選択した文字列を表示させる機能を実装したいです。
しかし、ボタンからピッカーを出す方法がわかりません。
ピッカーはテキストフィールドとしか連携できないのでしょうか?

以下は参考にした記事です。
こちらの回答をそのまま試したところ、テキストフィールドからの起動は実装できました。

記事;https://teratail.com/questions/53556

単純に上記記事のコードのテキストフィールとボタンとを置換しようと思ったのですが、

textField.inputView = vi textField.inputAccessoryView = toolBar

の部分をどうしていいのかがわかりません。
一応以下のように変更して見たのですが動作してくれません…

該当のソースコード

Swift

1 2 3 func PickerPush(){ 4 pickerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: pickerView.bounds.size.height) 5 // Connect data: 6 pickerView.delegate = self 7 pickerView.dataSource = self 8 let vi = UIView(frame: pickerView.bounds) 9 vi.backgroundColor = UIColor.white 10 FrontView.addSubview(pickerView) 11 let toolBar = UIToolbar() 12 toolBar.barStyle = UIBarStyle.default 13 toolBar.isTranslucent = true 14 toolBar.tintColor = UIColor.black 15 let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(StateViewController.donePressed)) 16 let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(StateViewController.cancelPressed)) 17 let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 18 toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 19 toolBar.isUserInteractionEnabled = true 20 toolBar.sizeToFit() 21 vi.addSubview(toolBar) 22 print("push") 23 } 24 @IBAction func HeadButton(_ sender: Any) { 25 PickerPush() 26 }

見当違いのことを書いているかと思います。大変申し訳ありません。
ご存知の方がおられれば、ボタンを押した時にピッカーがしたから出る方法を教えていただけないでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

作られているコードはさほど見当違いではなく、あともうちょっとだと思います。

このコードの中で書かれているpickerViewは、おそらくプロパティとして、
PickerPushメソッドの外で

swift

1let pickerView = UIPickerView()

のように定義しているのだと推測しました。

それと、

swift

1FrontView.addSubview(pickerView)

FrontViewがなんなのかわかりませんでしたが、
FrontViewは使わないで

swift

1vi.addSubview(pickerView)

に修正したらいいと思います。

それでviにpickerViewとtoolBarを追加できますが、
そのviを画面に追加していないので表示されないのだと思います。

そこでPickerPushの最後に次のコードを追加したところ、うまく表示されました。

swift

1 // viをviewに追加し、下からアニメーション表示 2 view.addSubview(vi) 3 let screenSize = UIScreen.main.bounds.size 4 vi.frame.origin.y = screenSize.height 5 UIView.animate(withDuration: 0.3) { 6 vi.frame.origin.y = screenSize.height - vi.bounds.size.height 7 }

あとは、donePressedやcancelPresseのメソッドの中でviをremoveFromSuperviewで削除する必要があると思うので、結局viもプロパティとして定義した方がいいかもしれません。

投稿2018/05/02 23:55

TakeOne

総合スコア6299

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

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

moe_1023

2018/05/03 06:47

ご指摘の通りに修正したところ、しっかり動作してくれました! 何日も悩まされていたので本当に嬉しいです。 とてもわかりやすい回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問