現状のswiftの動き
①テキストフィールドをタップするとpickerViewが開く。
②pickerViewから項目を選択でき、”Photo”を選択すると、フォトライブラリが開き、imageViewにセットされる。
実現したいこと
同じ物を2つ作りたいのですが、うまくいきません。
2つ目のpickerViewで、”Photo”を選択し、imageViewにはセットされるのですが、一つ目のimageViewにセットされてしまいます。
どこが、違っているのでしょうか。
ご教授のほど、よろしくお願い致します。
該当のソースコード
import UIKit class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UINavigationControllerDelegate, UIImagePickerControllerDelegate { @IBOutlet weak var firstTextField: UITextField! @IBOutlet weak var firstResultLabel: UILabel! var firstData = ["haru", "natsu", "aki","huyu","Photo"] var firstPickerView = UIPickerView() @IBOutlet weak var secondTextField: UITextField! @IBOutlet weak var secondResultLabel: UILabel! var secondData = ["heart", "club", "daiya","spade","Photo"] var secondPickerView = UIPickerView() override func viewDidLoad() { super.viewDidLoad() createPickerView() } func createPickerView() { //firstPickerView firstPickerView.delegate = self firstTextField.inputView = firstPickerView // toolbar let firstToolbar = UIToolbar() firstToolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) let firstDoneButtonItem = UIBarButtonItem(title: "決定", style: .done, target: self, action: #selector(ViewController.donePicker)) let firstFlexibleItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) firstToolbar.setItems([firstFlexibleItem,firstDoneButtonItem], animated: true) firstTextField.inputAccessoryView = firstToolbar //secondPickerView secondPickerView.delegate = self secondTextField.inputView = secondPickerView // toolbar let secondToolbar = UIToolbar() secondToolbar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) let secondDoneButtonItem = UIBarButtonItem(title: "決定", style: .done, target: self, action: #selector(ViewController.donePicker)) let secondFlexibleItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) secondToolbar.setItems([secondFlexibleItem,secondDoneButtonItem], animated: true) secondTextField.inputAccessoryView = secondToolbar } @objc func donePicker() { firstTextField.endEditing(true) secondTextField.endEditing(true) // 以下の条件分岐を追加 if firstTextField.text == "Photo" { // または、「if (row == 4)」 という書き方でも通るはずです // ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する func photoLibraryButton(_ sender: Any) { } // インスタンス生成 firstMyImagePicker = UIImagePickerController() // デリゲート設定 firstMyImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(firstMyImagePicker, animated: true, completion: nil) } else if secondTextField.text == "Photo" { func photoLibraryButton(_ sender: Any) { } // インスタンス生成 secondMyImagePicker = UIImagePickerController() // デリゲート設定 secondMyImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(secondMyImagePicker, animated: true, completion: nil) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { firstTextField.endEditing(true) secondTextField.endEditing(true) // 以下の条件分岐を追加 if ( firstTextField.text == "Photo") { // または、「if (row == 4)」 という書き方でも通るはずです // ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する func photoLibraryButton(_ sender: Any) { } // インスタンス生成 firstMyImagePicker = UIImagePickerController() // デリゲート設定 firstMyImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(firstMyImagePicker, animated: true, completion: nil) } else if secondTextField.text == "Photo" { func photoLibraryButton(_ sender: Any) { } // インスタンス生成 secondMyImagePicker = UIImagePickerController() // デリゲート設定 secondMyImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(secondMyImagePicker, animated: true, completion: nil) } } //画像をリストから選択するpickerView func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView == firstPickerView { return 5 } else { return 5 } } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView == firstPickerView { return firstData[row] } else { return secondData[row] } } // PickerViewで選択が完了した際に呼ばれるメソッド func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView == firstPickerView { firstTextField.text = firstData[row] firstResultLabel.text = firstData[row] if ( firstTextField.text == "haru"){ firstSampleView.image = UIImage(named: "haru") } if ( firstTextField.text == "natsu"){ firstSampleView.image = UIImage(named: "natsu") } if ( firstTextField.text == "aki"){ firstSampleView.image = UIImage(named: "aki") } if ( firstTextField.text == "huyu"){ firstSampleView.image = UIImage(named: "huyu") } } else if pickerView == secondPickerView { secondTextField.text = secondData[row] secondResultLabel.text = secondData[row] if ( secondTextField.text == "heart"){ secondSampleView.image = UIImage(named: "heart") } if ( secondTextField.text == "club"){ secondSampleView.image = UIImage(named: "club") } if ( secondTextField.text == "daiya"){ secondSampleView.image = UIImage(named: "daiya") } if ( secondTextField.text == "spade"){ secondSampleView.image = UIImage(named: "spade") } } } //画像が選択された時に呼ばれるメソッド //ライブラリが閉じると、遷移前のimageViewに表示される。 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { let firstPicker = firstPickerView let secondPicker = secondPickerView if firstPicker == firstPickerView { // 選択された画像を取得 if let firstMyImage = info[.originalImage] as? UIImage { // 遷移前の画面に画像を表示する firstSampleView.image = firstMyImage } // イメージピッカーを消す self.dismiss(animated: true, completion: nil) } else if secondPicker == secondPickerView { // 選択された画像を取得 if let secondMyImage = info[.originalImage] as? UIImage { // 遷移前の画面に画像を表示する secondSampleView.image = secondMyImage } } } //画像選択がキャンセルされた時に呼ばれる. func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { // イメージピッカーを消す self.dismiss(animated: true, completion: nil) } var firstMyImagePicker: UIImagePickerController! var secondMyImagePicker: UIImagePickerController! @IBOutlet weak var firstSampleView: UIImageView! @IBOutlet weak var secondSampleView: UIImageView! @IBAction func nextButton(_ sender: Any) { // 画像がセットされている時だけperformSegueを実行する if firstSampleView.image != nil { performSegue(withIdentifier: "playPage", sender: nil) } } }
使用している言語
swift
Xvode 11.4
ご教授のほど、よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 15:09