rosennameTextFieldで選択した新幹線の路線名によって
stationnameTextFieldで選択できる駅名を変える方法を教えてください。
東北新幹線なら["東京","上野","大宮","小山"]
上越新幹線なら["東京","上野","大宮","熊谷"]
東海道新幹線なら["東京","品川","新横浜"]
といった感じです。
ネットで調べながら進めてきましたが、データの取得の方法がわかりません。
よろしくお願いいたします。
import UIKit
class ViewController: UIViewController,UIPickerViewDelegate,
UIPickerViewDataSource{
@IBOutlet weak var rosennameTextField: UITextField! @IBOutlet weak var stationnameTextField: UITextField! let rosenname = ["東北新幹線","上越新幹線","東海道新幹線"] let stationname = ["東京","上野"] override func viewDidLoad() { super.viewDidLoad() let rosennamePickerView = UIPickerView() rosennamePickerView.delegate = self rosennamePickerView.tag = 1 rosennameTextField.inputView = rosennamePickerView let stationnamePickerView = UIPickerView() stationnamePickerView.delegate = self stationnamePickerView.tag = 2 stationnameTextField.inputView = stationnamePickerView // Do any additional setup after loading the view. } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView.tag == 1 { return rosenname.count } else if pickerView.tag == 2 { return stationname.count } return 0 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView.tag == 1 { return rosenname[row] } else if pickerView.tag == 2 { return stationname[row] } return nil
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 1 {
rosennameTextField.text = rosenname[row]
}
else if pickerView.tag == 2 {
stationnameTextField.text = stationname[row]
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
}
【追記】
以下のようにしてみましたが
import UIKit class ViewController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource{ @IBOutlet weak var rosennameTextField: UITextField! @IBOutlet weak var stationnameTextField: UITextField! let rosenname = ["東北新幹線","上越新幹線","東海道新幹線"] let stationname:[String:[String]] = [ "東北新幹線":["","東京","上野","大宮","小山","宇都宮","那須塩原","新白河","郡山"], "上越新幹線":["","東京","上野","大宮","熊谷","高崎"], "東海道新幹線":["","東京","品川","新横浜"] ] override func viewDidLoad() { super.viewDidLoad() let rosennamePickerView = UIPickerView() rosennamePickerView.delegate = self rosennamePickerView.tag = 1 rosennameTextField.inputView = rosennamePickerView let stationnamePickerView = UIPickerView() stationnamePickerView.delegate = self stationnamePickerView.tag = 2 stationnameTextField.inputView = stationnamePickerView // Do any additional setup after loading the view. } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView.tag == 1 { return rosenname.count } else if pickerView.tag == 2 { return stationname.count } return 0 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView.tag == 1 { return rosenname[row] } else if pickerView.tag == 2 { **return stationname[row]** } return nil } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView.tag == 1 { rosennameTextField.text = rosenname[row] } else if pickerView.tag == 2 { stationnameTextField.text = **stationname[row]** //Cannot subscript a value of type '[String : [String]]' with an index of type 'Int' というエラーが出てしまいます。 } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { view.endEditing(true) } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/06/05 07:18
2019/06/05 07:25
退会済みユーザー
2019/06/06 02:15
2019/06/06 04:57
退会済みユーザー
2019/06/06 09:35
2019/06/06 09:45