現状のswiftの動き
①textFieldをタップすると、下からpickerViewが開く。
②pickerViewの項目から"Photo"をタップするとフォトライブラリが開き、選択した画像が、遷移前のimageViewに表示される。
また、”Photo”以外の項目を選ぶと、Assets.xcassetsに登録した画像が、遷移前のimageViewに表示される。
③画面遷移後、Assets.xcassetsに登録した画像であれば、画面をタップすると画像が表示される。
実現したいこと
②のフォトライブラリで選択した画像も、画面遷移後に表示させたいです。
ご教授のほどよろしくお願いします。
該当のソースコード
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] } // PickerViewで選択が完了した際に呼ばれるメソッド func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { textField.text = data[row] result.text = data[row] if ( textField.text == "haru"){ sampleView.image = UIImage(named: "haru") } if ( textField.text == "natsu"){ sampleView.image = UIImage(named: "natsu") } if ( textField.text == "aki"){ sampleView.image = UIImage(named: "aki") } if ( textField.text == "huyu"){ sampleView.image = UIImage(named: "huyu") } } //画像が選択された時に呼ばれるメソッド //ライブラリが閉じると、遷移前の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) } @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(title: "決定", style: .done, target: self, action: #selector(ViewController.donePicker)) let flexibleItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) toolbar.setItems([flexibleItem,doneButtonItem], animated: true) textField.inputAccessoryView = toolbar } @objc func donePicker() { textField.endEditing(true) // 以下の条件分岐を追加 if ( textField.text == "Photo") { // ここに、ボタン押下で UIImagePickerController() を表示させた時の処理を記載する func photoLibraryButton(_ sender: Any) { } // インスタンス生成 myImagePicker = UIImagePickerController() // デリゲート設定 myImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(myImagePicker, animated: true, completion: nil) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { textField.endEditing(true) if ( textField.text == "Photo") { func photoLibraryButton(_ sender: Any) { } // インスタンス生成 myImagePicker = UIImagePickerController() // デリゲート設定 myImagePicker.delegate = self //ここでイメージピッカーを表示させる。 present(myImagePicker, animated: true, completion: nil) } } var myImagePicker: UIImagePickerController! @IBOutlet weak var sampleView: UIImageView! @IBAction func nextButton(_ sender: Any) { performSegue(withIdentifier: "playPage", sender: nil) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let nextVC = segue.destination as? SecondViewController { nextVC.imageName = result.text } } }
###遷移後のコード
import UIKit class SecondViewController: UIViewController { var imageName: String! override func viewDidLoad() { super.viewDidLoad() // 前のページで値が入った imageName を表示する print(imageName!) } @IBAction func addImage(_ sender: UITapGestureRecognizer) { // UIImage の引数として imageName を渡す let mark = UIImageView(image: UIImage(named: imageName)) mark.frame = CGRect(x: 0, y: 0, width: 100, height: 100) // UIImageViewの中心座標をタップされた位置に設定 mark.center = sender.location(in: self.view) // UIImageViewを追加 self.view.addSubview(mark) } }
使用している言語
swift
Xvode 11.4
ご教授のほど、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/14 10:41
2020/05/14 11:09
2020/05/14 13:36
2020/05/14 13:40
2020/05/14 14:56
2020/05/14 22:37
2020/05/14 23:22
2020/05/15 01:29
2020/05/15 12:27
2020/05/17 09:21
2020/05/17 10:55