質問編集履歴

2 ストーリーボード追加

shin6847

shin6847 score 12

2018/10/31 09:26  投稿

テキストフィールドを切り替えた時UIPickerの中身も変わるようにしたい
### 前提・実現したいこと
テキストフィールドを切り替えた時UIPickerの中身のリストが切り替わるようにしたいです。
### 発生している問題・エラーメッセージ
```
dataListにlistが代入されません
```
### 該当のソースコード
```swift
import UIKit
import AVFoundation
class playViewController: UIViewController, UITextFieldDelegate{
   
   @IBOutlet weak var pitchText: UITextField!
   @IBOutlet weak var speedText: UITextField!
   let myPicker = UIPickerView()
   let toolBar = UIToolbar()
   
   var dataList:[String] = []
   let speedList = ["10", "20", "30", "40", "50", "60", "70", "80", "90", "100",
                          "110", "120", "130", "140", "150", "160", "170", "180", "190", "200"]
   let pitchList = ["-12", "-11", "-10", "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0",
                       "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "24"]
 
   override func viewDidLoad() {
       super.viewDidLoad()
       pitchText.tag = 1
       speedText.tag = 2
       createPicker()
       createToolBar()
   }
       
   func createPicker() {
       myPicker.delegate = self
       //myPicker.dataSource = self
       myPicker.frame = CGRect(x: 0, y: 4500, width:375.0, height: 162.0)
       myPicker.backgroundColor = UIColor.white
       speedText.inputView = myPicker
       pitchText.inputView = myPicker
   }
   
   func createToolBar() {
       toolBar.sizeToFit()
       let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: "self", action: "myok:")
       toolBar.setItems([doneButton], animated: false)
       toolBar.isUserInteractionEnabled = true
       
       speedText.inputAccessoryView = toolBar
       pitchText.inputAccessoryView = toolBar
   }
   
   func myok(sender: UIBarButtonItem) {
       view.endEditing(true)
       speedText.resignFirstResponder()
       pitchText.resignFirstResponder()
   }
   
   func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
       dataList = textField.tag == 1 ? pitchList : speedList
       myPicker.reloadAllComponents()
       return true
   }
}
extension playViewController: UIPickerViewDelegate, UIPickerViewDataSource {
   
   func numberOfComponents(in pickerView: UIPickerView) -> Int {
       return 1
   }
   
   func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
       return dataList.count
   }
   
   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
       return dataList[row]
   }
   
   func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) -> String {
       return dataList[row]
   }
}
```
ストーリーボード
![イメージ説明](657b5ec2af0d063415d67563de24bfaf.png)
```
![イメージ説明](28c6922d534f3f83197758c28253ebef.png)
### 試したこと
類似の質問とyoutube上のチュートリアルを元に作成しましたがうまくいきませんでした
テキストフィールドが選択された時にdataListを出力して見ましたが何も出てきませんでした
### 補足情報(FW/ツールのバージョンなど)
swift 4.2
  • Swift

    10814 questions

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

1 試したこと追加

shin6847

shin6847 score 12

2018/10/31 09:24  投稿

テキストフィールドを切り替えた時UIPickerの中身も変わるようにしたい
### 前提・実現したいこと
テキストフィールドを切り替えた時UIPickerの中身のリストが切り替わるようにしたいです。
### 発生している問題・エラーメッセージ
```
dataListにlistが代入されません
```
### 該当のソースコード
```swift
import UIKit
import AVFoundation
class playViewController: UIViewController, UITextFieldDelegate{
   
   @IBOutlet weak var pitchText: UITextField!
   @IBOutlet weak var speedText: UITextField!
   let myPicker = UIPickerView()
   let toolBar = UIToolbar()
   
   var dataList:[String] = []
   let speedList = ["10", "20", "30", "40", "50", "60", "70", "80", "90", "100",
                          "110", "120", "130", "140", "150", "160", "170", "180", "190", "200"]
   let pitchList = ["-12", "-11", "-10", "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0",
                       "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "24"]
 
   override func viewDidLoad() {
       super.viewDidLoad()
       pitchText.tag = 1
       speedText.tag = 2
       createPicker()
       createToolBar()
   }
       
   func createPicker() {
       myPicker.delegate = self
       //myPicker.dataSource = self
       myPicker.frame = CGRect(x: 0, y: 4500, width:375.0, height: 162.0)
       myPicker.backgroundColor = UIColor.white
       speedText.inputView = myPicker
       pitchText.inputView = myPicker
   }
   
   func createToolBar() {
       toolBar.sizeToFit()
       let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: "self", action: "myok:")
       toolBar.setItems([doneButton], animated: false)
       toolBar.isUserInteractionEnabled = true
       
       speedText.inputAccessoryView = toolBar
       pitchText.inputAccessoryView = toolBar
   }
   
   func myok(sender: UIBarButtonItem) {
       view.endEditing(true)
       speedText.resignFirstResponder()
       pitchText.resignFirstResponder()
   }
   
   func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
       dataList = textField.tag == 1 ? pitchList : speedList
       myPicker.reloadAllComponents()
       return true
   }
}
extension playViewController: UIPickerViewDelegate, UIPickerViewDataSource {
   
   func numberOfComponents(in pickerView: UIPickerView) -> Int {
       return 1
   }
   
   func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
       return dataList.count
   }
   
   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
       return dataList[row]
   }
   
   func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) -> String {
       return dataList[row]
   }
}
 
 
ストーリーボード  
![イメージ説明](657b5ec2af0d063415d67563de24bfaf.png)  
```
### 試したこと
類似の質問とyoutube上のチュートリアルを元に作成しましたがうまくいきませんでした
テキストフィールドが選択された時にdataListを出力して見ましたが何も出てきませんでした  
### 補足情報(FW/ツールのバージョンなど)
swift 4.2
  • Swift

    10814 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る