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

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

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

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

Swift

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

iPhone

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

Q&A

1回答

1018閲覧

フォトライブラリから選択した画像をimageViewにセットするコードを複数作りたいです。

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/25 01:59

現状の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

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

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

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

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

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

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

guest

回答1

0

func photoLibraryButton(_ sender: Any) {}
関数内関数が何もしないで終わってるけど...

投稿2020/05/25 09:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

magiee

2020/05/27 15:09

回答していただきありがとうございます。 完全なる凡ミスだと思い、修正したのですが、"Photo"を選択するとフォトライブラリが開いていたのですが、フォトライブラリすら開かなくなってしまいました。 どのように修正すればよろしいのでしょうか?? よろしくお願いいたします。 func photoLibraryButton(_ sender: Any) { //  } ←修正箇所 // インスタンス生成 firstMyImagePicker = UIImagePickerController() // デリゲート設定 firstMyImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(firstMyImagePicker, animated: true, completion: nil)    } ← 修正箇所
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問