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

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

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

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2119閲覧

pickerViewを複数設置したいです。

magiee

総合スコア28

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/05/23 15:43

現状のswiftの動き

①テキストフィールドをタップすると、下からpickerViewが出てくる。
②pickerViewから項目を選ぶと、ラベルに項目名が表示される。

実現したいこと

上記の物を、複数作りたい際は、どのようにしたら良いでしょうか?
上記のコードをコピペして、変数名を変えれば良いだけと思っていたら、
違うみたいです。
どこが違うのでしょうか?

ご教授のほど、よろしくお願い致します。

イメージ説明

該当のソースコード

(2つ目のpickerViewも、"A", "B", "C","D","E"と表示されてしまいます。本当は"1", "2", "3","4","5"と表示させたいです。)

import UIKit class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return 5 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return data[row] } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { textField.text = data[row] result.text = data[row] } @IBOutlet weak var textField: UITextField! @IBOutlet weak var result: UILabel! var pickerView = UIPickerView() var data = ["A", "B", "C","D","E"] override func viewDidLoad() { super.viewDidLoad() createPickerView() createPickerView1() } func createPickerView() { pickerView.delegate = self textField.inputView = pickerView // toolbar let toolbar = UIToolbar() toolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) let doneButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.donePicker)) toolbar.setItems([doneButtonItem], animated: true) textField.inputAccessoryView = toolbar } @objc func donePicker() { textField.endEditing(true) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { textField.endEditing(true) textField1.endEditing(true) } func numberOfComponents1(in pickerView: UIPickerView) -> Int { return 1 } func pickerView1(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return 5 } func pickerView1(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return data1[row] } func pickerView1(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { textField1.text = data1[row] result1.text = data1[row] } @IBOutlet weak var textField1: UITextField! @IBOutlet weak var result1: UILabel! var pickerView1 = UIPickerView() var data1 = ["1", "2", "3","4","5"] func createPickerView1() { pickerView1.delegate = self textField1.inputView = pickerView1 // toolbar let toolbar = UIToolbar() toolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) let doneButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.donePicker1)) toolbar.setItems([doneButtonItem], animated: true) textField1.inputAccessoryView = toolbar } @objc func donePicker1() { textField1.endEditing(true) } }

使用している言語

swift
Xvode 11.4

ご教授のほど、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じで両方のpickerViewを設定してください。

swift

1 2class ViewController: UIViewController, // 略 3 4 let upperPickerView = UIPickerView() 5 let lowerPickerView = UIPickerView() 6 7 // ↑この2つのpickerViewに対して各種設定を記述してください。 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 upperPickerView.dataSource = self 11 lowerPickerView.dataSource = self 12     // などなど 13 } 14 15 // デリゲートメソッドの中身は条件分岐して設定してください 16 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 17 if pickerView == upperPickerView { 18 return 5 19 } else { 20 return 10 21 } 22 } 23}

swift

1 2import UIKit 3 4class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 5 6 @IBOutlet weak var upperTextField: UITextField! 7 8 @IBOutlet weak var upperResultLabel: UILabel! 9 10 var upperPickerView = UIPickerView() 11 12 var upperData = ["1", "2", "3","4","5"] 13 14 @IBOutlet weak var lowerTextField: UITextField! 15 16 @IBOutlet weak var lowerResultLabel: UILabel! 17 18 var lowerPickerView = UIPickerView() 19 20 var lowerData = ["A", "B", "C","D","E"] 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 createPickerView() 25 } 26 27 func createPickerView() { 28 // upperPickerView 29 upperPickerView.delegate = self 30 upperTextField.inputView = upperPickerView 31 // toolbar 32 let upperToolbar = UIToolbar() 33 upperToolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) 34 let upperDoneButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.donePicker)) 35 upperToolbar.setItems([upperDoneButtonItem], animated: true) 36 upperTextField.inputAccessoryView = upperToolbar 37 38 // lowerPickerView 39 lowerPickerView.delegate = self 40 lowerTextField.inputView = lowerPickerView 41 // toolbar 42 let lowerToolbar = UIToolbar() 43 lowerToolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) 44 let lowerDoneButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.donePicker)) 45 lowerToolbar.setItems([lowerDoneButtonItem], animated: true) 46 lowerTextField.inputAccessoryView = lowerToolbar 47 } 48 49 @objc func donePicker() { 50 upperTextField.endEditing(true) 51 lowerTextField.endEditing(true) 52 } 53 54 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 55 upperTextField.endEditing(true) 56 lowerTextField.endEditing(true) 57 } 58 59 60 func numberOfComponents(in pickerView: UIPickerView) -> Int { 61 return 1 62 } 63 64 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 65 return 5 66 } 67 68 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 69 if pickerView == upperPickerView { 70 return upperData[row] 71 } else { 72 return lowerData[row] 73 } 74 } 75 76 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 77 if pickerView == upperPickerView { 78 upperTextField.text = upperData[row] 79 upperResultLabel.text = upperData[row] 80 } else { 81 lowerTextField.text = lowerData[row] 82 lowerResultLabel.text = lowerData[row] 83 } 84 } 85} 86

投稿2020/05/23 15:55

編集2020/05/24 13:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

magiee

2020/05/24 13:10

回答していただきありがとうございます。 すみません、もう少しご教授お願いいたします。 下記のコードだと、うまくいきませんでした。 pickerView == upperPickerView がうまくいってないみたいです。 import UIKit class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { let upperPickerView = UIPickerView() let lowerPickerView = UIPickerView() func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView == upperPickerView { return 5 } else { return 7 } } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView == upperPickerView { return data[row] } else { return data1[row] } } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView == upperPickerView { textField.text = data[row] result.text = data[row] } else { textField.text = data1[row] result.text = data1[row] } } @IBOutlet weak var textField: UITextField! @IBOutlet weak var result: UILabel! @IBOutlet weak var textField1: UITextField! @IBOutlet weak var result1: UILabel! var data = ["haru", "natsu", "aki","huyu","Photo"] var data1 = ["1","2","3","4","5","6","7"] override func viewDidLoad() { super.viewDidLoad() upperPickerView.dataSource = self lowerPickerView.dataSource = self createPickerView() } var pickerView = UIPickerView() var pickerView1 = UIPickerView() func createPickerView() { if pickerView == upperPickerView { pickerView.delegate = self textField.inputView = pickerView // toolbar let toolbar = UIToolbar() toolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) let doneButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.donePicker)) toolbar.setItems([doneButtonItem], animated: true) textField.inputAccessoryView = toolbar } else { pickerView1.delegate = self textField.inputView = pickerView1 // toolbar let toolbar = UIToolbar() toolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) let doneButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ViewController.donePicker)) toolbar.setItems([doneButtonItem], animated: true) textField.inputAccessoryView = toolbar } } @objc func donePicker() { if pickerView == upperPickerView { textField.endEditing(true) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if pickerView == upperPickerView { textField.endEditing(true) } } }
magiee

2020/05/24 15:56

丁寧に解説していただきありがとうございます。 無事に、解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問