実現したいこと
アルバム(カメラロール)で選択した画像をCustomCellに設置したUIImageViewに表示させたい。
###前提条件
- UINavigationControllerを継承したViewControllerが1つ。
- そのViewControllerにUITableViewとUITableViewCellを設置している。
- UITableViewCellには、UIImageViewを設置している。
- UITableViewCellのIdentifierは"Cell"です。
アルバムで選択した画像をViewController内のUIImageViewに表示させることは出来るのですが
UITableViewCellに設置したUIImageViewに表示することが出来ません。
ViewControllerに設置したUIImageViewには、アルバムで選択した画像を表示させることは出来ています。
1ヶ月ぐらい、この方法について検索してヒットした情報をもとに自分のコードに反映させて実践しましたが
UITableViewCellにアルバムで選択した画像を反映させることは出来ませんでした。
色々検索して思うのは、アルバムの画像をカスタムセルに反映させる方法は大別して2つあるよう思っています。
- グローバル変数を使用してCustomCellクラスに画像を受け渡しTableViewをreloadする?
- デリゲートメソッドを使用して値を受け渡す?
言い訳ですが基本的なXcodeで使用しているUI Kit等のクラス、メソッドについても理解が追いつかず、
検索してヒットした情報を活かしきることが出来ていないとも思います。
このまま一人で学習していても理解が進まないでの質問させていただきました。
大変恐縮ですが、下記のソースコードに追加または修正で、どのようなコードが必要か教えていただきたいです。
使用している環境
Xcode Ver.11.5
Swift 5
該当のソースコード
swift
1 2import UIKit 3 4class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIImagePickerControllerDelegate,UINavigationControllerDelegate{ 5 6 7 @IBOutlet weak var album: UIButton! 8 @IBOutlet weak var selectedImage: UIImageView! 9 @IBOutlet weak var MainTable: UITableView! 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 MainTable.delegate = self 15 MainTable.dataSource = self 16 MainTable.register (UINib(nibName: "CustomCell",bundle: nil),forCellReuseIdentifier:"Cell") 17 18 } 19 20 // アルバムを起動 21 @IBAction func albumOpen(_ sender: Any) { 22 23 let sourceType:UIImagePickerController.SourceType = 24 UIImagePickerController.SourceType.photoLibrary 25 // アルバムが利用可能かチェック 26 if UIImagePickerController.isSourceTypeAvailable( 27 UIImagePickerController.SourceType.photoLibrary){ 28 // インスタンスの作成 29 let imagePicker = UIImagePickerController() 30 imagePicker.sourceType = sourceType 31 imagePicker.delegate = self 32 self.present(imagePicker, animated: true, completion: nil) 33 } 34 35 else { 36 print("アルバム使用不可") 37 } 38 } 39 40 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 41 42 return 1 43 44 } 45 46 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 47 let cell = MainTable.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell 48 49 cell.cellImage.image = //この後をどう書けば良いか分かりません。 50 51 return cell 52 } 53 54 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 55 return 200 56 } 57 58 //画像ピッカーコントローラから画像が選択されるとアクションを処理するメソッド 59 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { 60 61 if let pickedImage = info[.originalImage] 62 as? UIImage { 63 64 // ViewControllerのUIImageView表示させることは出来ている。 65 selectedImage.image = pickedImage 66 67 } 68 69 picker.dismiss(animated: true, completion: nil) 70 } 71 72 // 撮影がキャンセルされた時に呼ばれる 73 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 74 picker.dismiss(animated: true, completion: nil) 75 print("エラー") 76 } 77 78}
Swift
1import UIKit 2 3class CustomCell: UITableViewCell{ 4 5 @IBOutlet weak var cellImage: UIImageView! 6 7 override func awakeFromNib() { 8 super.awakeFromNib() 9 10 } 11 12 override func setSelected(_ selected: Bool, animated: Bool) { 13 super.setSelected(selected, animated: animated) 14 15 } 16 17}
試したこと
-
データを共有するModelを作成してimagePickerControllerで選択した画像をModelに渡してCustomCellに反映させようとしましたが実現出来ませんでした。
-
デリゲートメソッドの引数を利用して画像を受け渡しCustomCellで表示させようとしましたが実現出来ませんでした。
補足情報(FW/ツールのバージョンなど)
Xcode Ver.11.5
Swift 5.1
回答1件
あなたの回答
tips
プレビュー