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

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回答

1021閲覧

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/12 15:16

現状のswiftの動き

①textFieldをタップすると、pickerViewが表示される。
②pickerViewで項目を選択すると、textLabelに項目名が表示される。

実現したいこと

選択した項目の中に”Photo”があり、この”Photo”が選択させると、フォトライブラリが開く。←ここが不明
textLabelは”Photo”と表示。←ここは分かる
フォトライブラリで選択した画像を、imageViewに表示する。 ←おそらく分かる

###分からないところ
「pickerViewで”Photo”が選択された時のみ、フォトライブラリを開く。」
と言うコードが、分かりません。

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

textLabelにのみ表示されるコード

このコードからプラスで、”Photo”が選択された時のみ、imageViewに選択された画像を表示させたいです。

import UIKit class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UINavigationControllerDelegate, UIImagePickerControllerDelegate { 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 = ["haru", "natsu", "aki","huyu","Photo"] override func viewDidLoad() { super.viewDidLoad() createPickerView() } 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) }

###Buttonで、フォトライブラリが開くコード
Buttonでフォトライブラリが開き、imageViewに表示されるコードはわかるのですが、これをどうつなげたら良いか、分かりません。

@IBAction func photoLibraryButton(_ sender: Any) { // インスタンス生成 myImagePicker = UIImagePickerController() // デリゲート設定 myImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(myImagePicker, animated: true, completion: nil) } // ライブラリが閉じると、遷移前のimageViewに表示される。 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // 選択された画像を取得 if let myImage = info[.originalImage] as? UIImage { // 遷移前の画面に画像を表示する sampleView.image = myImage } // イメージピッカーを消す self.dismiss(animated: true, completion: nil) } //画像選択がキャンセルされた時に呼ばれる. func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { // イメージピッカーを消す self.dismiss(animated: true, completion: nil) }

使用している言語

swift
Xvode 11.4

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

PickerViewの選択完了時メソッド内で、**「"Photo"が選択された場合」**という条件分岐を追加すれば対応可能になりますがいかがでしょうか。
以下にサンプルを記載しますが、書き方は適宜微調整をお願いいたします。

Swift

1 2// PickerViewで選択が完了した際に呼ばれるメソッド 3func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 4 textField.text = data[row] 5 result.text = data[row] 6 7 // 以下の条件分岐を追加 8 if (data[row] == "Photo") { // または、「if (row == 4)」 という書き方でも通るはずです 9 10 // ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する 11 // インスタンス生成 12 myImagePicker = UIImagePickerController() 13 14 // デリゲート設定 15 myImagePicker.delegate = self 16 17 //ここでイメージピッカーを表示させる。 18 present(myImagePicker, animated: true, completion: nil) 19 } 20}

5/13追記

頂いたコメントに対して回答させて頂きます。

「// ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する」とソースに記載してましたが、PickerViewの選択完了時メソッド内にボタン押下時メソッドを全て含める訳ではありません。
※コメント内のソースは、メソッド内に以下メソッドがあったりして文法的におかしくなっていると思います。

質問者様がボタン押下時のメソッド内で実装している以下処理を、PickerViewの選択完了時メソッド内のIF文に記載するイメージです。

Swift

1// インスタンス生成 2myImagePicker = UIImagePickerController() 3 4// デリゲート設定 5myImagePicker.delegate = self 6 7//ここでイメージピッカーを表示させる。 8present(myImagePicker, animated: true, completion: nil)

・サンプル

Swift

1func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 2 textField.text = data[row] 3 result.text = data[row] 4 5 // 以下の条件分岐を追加 6 if (data[row] == "Photo") { // または、「if (row == 4)」 という書き方でも通るはずです 7 8 // ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する 9 // インスタンス生成 10 myImagePicker = UIImagePickerController() 11 12 // デリゲート設定 13 myImagePicker.delegate = self 14 15 //ここでイメージピッカーを表示させる。 16 present(myImagePicker, animated: true, completion: nil) 17 } 18} 19 20// ライブラリが閉じると、遷移前のimageViewに表示される。 21func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 22 23 // 選択された画像を取得 24 if let myImage = info[.originalImage] as? UIImage { 25 // 遷移前の画面に画像を表示する 26 sampleView.image = myImage 27 28 } 29 // イメージピッカーを消す 30 self.dismiss(animated: true, completion: nil) 31} 32 33//画像選択がキャンセルされた時に呼ばれる. 34func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 35 // イメージピッカーを消す 36 self.dismiss(animated: true, completion: nil) 37}

投稿2020/05/12 15:50

編集2020/05/13 00:28
tsuki01

総合スコア1751

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

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

magiee

2020/05/12 22:50

回答していただきありがとうございます。 上記のコードを下に、やってみたのですが、フォトライブラリが開きません。何か間違っているのでしょうか?添削のほどよろしくお願い致します。 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { textField.text = data[row] result.text = data[row] // 以下の条件分岐を追加 if (data[row] == "Photo") { // または、「if (row == 4)」 という書き方でも通るはずです // ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する func photoLibraryButton(_ sender: Any) { // インスタンス生成 myImagePicker = UIImagePickerController() // デリゲート設定 myImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(myImagePicker, animated: true, completion: nil) } //画像が選択された時に呼ばれるメソッド //ライブラリが閉じると、遷移前のimageViewに表示される。 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // 選択された画像を取得 if let myImage = info[.originalImage] as? UIImage { // 遷移前の画面に画像を表示する sampleView.image = myImage } // イメージピッカーを消す self.dismiss(animated: true, completion: nil) } //画像選択がキャンセルされた時に呼ばれる. func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { // イメージピッカーを消す self.dismiss(animated: true, completion: nil) }
tsuki01

2020/05/13 00:28

回答に追記しました。ご確認をお願いいたします。
magiee

2020/05/13 10:28

回答していただき、ありがとうございます。 単純なミスでした。丁寧に解説していただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問