前提・実現したいこと
TableViewに表示したcellにボタンを設置し、ボタンをタップした時にカメラロール(フォトライブラリー)から写真を取得したいです。
(下記画像のプロフィール画像横の"Button")
xibファイルとUITableViewCellで作成しています。
発生している問題・エラーメッセージ
cellではpresentメソッドが使用できない為、どのように解決をすれば良いかわからないでいます。
Use of unresolved identifier 'present' Value of type 'ProfileTableViewCell' has no member 'dismiss'
該当のソースコード
↓ProfileTableViewCell.swift
Swift
1import UIKit 2 3class ProfileTableViewCell: UITableViewCell, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 4 5 6 @IBOutlet weak var imagePickUpButton: UIButton! 7 @IBOutlet weak var userImageView: UIImageView! 8 var picker: UIImagePickerController! = UIImagePickerController() 9 10 override func awakeFromNib() { 11 super.awakeFromNib() 12 13 } 14 15 override func setSelected(_ selected: Bool, animated: Bool) { 16 super.setSelected(selected, animated: animated) 17 } 18 19 func imagePickUpButtonClicked(sender: UIButton) { 20 picker.sourceType = UIImagePickerController.SourceType.photoLibrary 21 picker.delegate = self 22 picker.navigationBar.tintColor = UIColor.white 23 picker.navigationBar.barTintColor = UIColor.gray 24 present(picker, animated: true, completion: nil) //エラーになる 25 } 26 27 28 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 29 if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { 30 imagePickUpButton.setBackgroundImage(image, for: UIControl.State.normal) 31 } else { 32 print("Error") 33 } 34 self.dismiss(animated: true, completion: nil) //エラーになる 35 } 36 37 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 38 // モーダルビューを閉じる 39 self.dismiss(animated: true, completion: nil) //エラーになる 40 } 41} 42
↓ProfileViewController.swift
Swift
1import UIKit 2 3class ProfileViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 4 5 @IBOutlet weak var profileTableView: UITableView! 6 7 var sectionTitlle = [" "," ", " "] 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 profileTableView.delegate = self 12 profileTableView.dataSource = self 13 profileTableView.register(UINib(nibName: "ProfileTableViewCell", bundle: nil), forCellReuseIdentifier: "ProfileTableViewCell") 14 profileTableView.register(UINib(nibName: "BackgroundTableViewCell", bundle: nil), forCellReuseIdentifier: "BackgroundTableViewCell") 15 profileTableView.register(UINib(nibName: "UserNameTableViewCell", bundle: nil), forCellReuseIdentifier: "UserNameTableViewCell") 16 } 17 18 func numberOfSections(in tableView: UITableView) -> Int { 19 return sectionTitlle.count 20 } 21 22 func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 23 return sectionTitlle[section] 24 } 25 26 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 27 return 1 28 } 29 30 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 31 if indexPath.section == 0 { 32 let cell: ProfileTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ProfileTableViewCell") as! ProfileTableViewCell 33 return cell 34 } else if indexPath.section == 1 { 35 let cell: BackgroundTableViewCell = tableView.dequeueReusableCell(withIdentifier: "BackgroundTableViewCell") as! BackgroundTableViewCell 36 return cell 37 } else { 38 let cell: UserNameTableViewCell = tableView.dequeueReusableCell(withIdentifier: "UserNameTableViewCell") as! UserNameTableViewCell 39 self.view.endEditing(true) 40 return cell 41 } 42 } 43 44 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 45 return 50 46 } 47 48 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 49 return 15 50 } 51 52 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 53 // セルの選択解除 54 profileTableView.deselectRow(at: indexPath, animated: true) 55 return 56 } 57}
試したこと
下記記事を元に実装しています。
https://qiita.com/takoikatakotako/items/22a29c3992b6e643245a
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 12:35