DKImagePickerControllerでライブラリから取得した複数の画像をphots(配列)に入れて
tableViewのあるcontrollerの配列に渡しcellを生成したいです。
さらにcellをタップし画面遷移する時に、DKImagePickerController→tableViewのあるcontrollerと渡した複数の画像を
さらに渡してColection Viewに表示したいと考えています。
しかし、cellを生成する時にindex.rowを使うと複数枚の画像を渡すことができないと思います。
複数渡したいものがある場合配列は向かないのでしょうか?
画像選択の最大数が5枚なので5つの配列を用意して1枚ずつ別の配列に入れて渡すことも考えました。
分かりにくい説明になり申し訳ありませんが、知識のあるかた解決方法を回答お願いします。
swift
1 2import UIKit 3import DKImagePickerController 4 5class hennsyuViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UITextFieldDelegate, UITextViewDelegate { 6 7 var completButtonItem:UIBarButtonItem! 8 9 @IBOutlet weak var textField: UITextView! 10 @IBOutlet weak var dateField: UITextField! 11 @IBOutlet weak var hyoukaField: UITextField! 12 @IBOutlet weak var addressField: UITextField! 13 @IBOutlet weak var nameField: UITextField! 14 15 var callback1: ((String) -> Void)! 16 var callback2: ((String) -> Void)! 17 var callback3: ((String) -> Void)! 18 var callback4: ((String) -> Void)! 19 var callback5: ((String) -> Void)! 20 var callback6: ((String) -> Void)! 21 22 var photos: [UIImage] = [] 23 24 var nikkiImage = UIImage() 25 // 実際に選択された枚数 26 var selectedCount = 0 27 28 let pickerController = DKImagePickerController() 29 30 override func viewDidLoad() { 31 super.viewDidLoad() 32 33 dateField.delegate = self 34 hyoukaField.delegate = self 35 addressField.delegate = self 36 nameField.delegate = self 37 textField.delegate = self 38 39 completButtonItem = UIBarButtonItem(title: "完了", style: .done, target: self, action: #selector(completButtonTapped(_:))) 40 self.navigationItem.rightBarButtonItem = completButtonItem 41 42 } 43 44 45 @IBAction func addImageButton(_ sender: Any) { 46 47 pickerController.maxSelectableCount = 5 48 //カメラモード、写真モードの選択 49 pickerController.sourceType = .photo 50 //キャンセルボタンの有効化 51 pickerController.showsCancelButton = true 52 53 pickerController.UIDelegate = CustomUIDelegate() 54 55 56// pickerController.didSelectAssets = { (assets: [DKAsset]) in 57// } 58// } 59 pickerController.didSelectAssets = { (assets: [DKAsset]) in 60 for asset in assets { 61 asset.fetchFullScreenImage(completeBlock: { (image, info) in 62 self.photos.append(image!) 63 }) 64 } 65 } 66 67 pickerController.modalPresentationStyle = .fullScreen 68 69 70 71 present(pickerController, animated: true, completion: nil) 72 73 74 } 75 76 @objc func kbDoneTaped (_ sender:UIButton){ 77 78 self.view.endEditing(true) 79 80 } 81 82 //完了ボタンを押した時 83 @objc func completButtonTapped(_ sender: UIBarButtonItem){ 84 85 let name = nameField.text 86 let date = dateField.text 87 let hyouka = hyoukaField.text 88 let text = textField.text 89 let address = addressField.text 90 91 92 if let n = navigationController, 93 n.viewControllers[n.viewControllers.count - 2] is nikkiTableViewController { 94 95 // ①から遷移してきた場合は完了をタップしたことを表すフラグを設定します。 96 AppState.isEdited = true 97 98 callback1(name!) 99 callback2(date!) 100 callback3(hyouka!) 101 callback4(text!) 102 callback5(address!) 103 104 print("Nikki呼ばれた") 105 106 } 107 navigationController?.popViewController(animated: true) 108 109 } 110 111} 112 113
swift
1import UIKit 2 3class nikkiTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate{ 4 5 private let cellId = "cellId" 6 7 var addBarButtonItem:UIBarButtonItem! 8 9 var topImageArray = [UIImage]() 10 var nameArray = [String?]() 11 var dateArray = [String?]() 12 var hyoukaArray = [String?]() 13 var textViewArray = [String?]() 14 var addressArray = [String?]() 15 16 var practice: String? 17 18 @IBOutlet weak var nikkiTableView: UITableView! 19 20 21 override func viewDidLoad() {super.viewDidLoad() 22 23 setupSearchBar() 24 25 addBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addBarButtonTapped(_:))) 26 addBarButtonItem.tintColor = UIColor.white 27 28 //navigationVarの右側に追加 29 self.navigationItem.rightBarButtonItem = addBarButtonItem 30 31 nikkiTableView.delegate = self 32 nikkiTableView.dataSource = self 33 34 let appearance = UINavigationBarAppearance() 35 appearance.configureWithOpaqueBackground() 36 appearance.backgroundColor = .rgb(red: 173, green: 216, blue: 230) 37 38 //標準の高さ 39 navigationItem.standardAppearance = appearance 40 //ナビゲーションバーが透過する 41 navigationItem.scrollEdgeAppearance = appearance 42 //標準の文字の大きさ 43 navigationItem.compactAppearance = appearance 44 45 let tapGesture = UITapGestureRecognizer( 46 target: self, 47 action: #selector(dismissKeyboard)) 48 view.addGestureRecognizer(tapGesture) 49 50 tapGesture.cancelsTouchesInView = false 51 52 } 53 54 55 @objc func dismissKeyboard() { 56 navigationItem.titleView?.endEditing(true) 57 } 58 59 60 61 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 62 63 return 190 64 } 65 66 func numberOfSections(in tableView: UITableView) -> Int { 67 68 return 1 69 } 70 71 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 72 73 return nameArray.count 74 75 } 76 77 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 78 79 let cell = nikkiTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! nikkiTableViewCell 80 81 if let c = cell as? nikkiTableViewCell { 82 83 c.nameLabel.text = nameArray[indexPath.row] 84 c.dateLabel?.text = dateArray[indexPath.row] 85 c.hyoukaLabel?.text = hyoukaArray[indexPath.row] 86 } 87 88 return cell 89 90 } 91 92 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 93 94 let storyboard = UIStoryboard(name: "nikkiTableView", bundle: nil) 95 let textVC = storyboard.instantiateViewController(withIdentifier: 96 "textViewController") as! textViewController 97 98 textVC.name = nameArray[indexPath.row] 99 textVC.address = addressArray[indexPath.row] 100 textVC.hyouka = hyoukaArray[indexPath.row] 101 textVC.date = dateArray[indexPath.row] 102 textVC.text = textViewArray[indexPath.row] 103 104 navigationController?.pushViewController(textVC, animated: true) 105 //タップした後、セルの色が白色に戻る 106 tableView.deselectRow(at: indexPath, animated: true) 107 108 navigationItem.titleView?.endEditing(true) 109 110 111 } 112 113 114 @objc func addBarButtonTapped(_ sender: UIBarButtonItem) { 115 116 let hennsyuVc = storyboard?.instantiateViewController(withIdentifier: "hennsyuViewController") as! hennsyuViewController 117 118 hennsyuVc.callback1 = {n in 119 self.nameArray.insert(n, at: 0) 120 } 121 122 hennsyuVc.callback2 = {d in 123 self.dateArray.insert(d, at: 0) 124 } 125 126 hennsyuVc.callback3 = {h in 127 self.hyoukaArray.insert(h, at: 0) 128 } 129 130 hennsyuVc.callback4 = {t in 131 self.textViewArray.insert(t, at: 0) 132 } 133 134 hennsyuVc.callback5 = {a in 135 self.addressArray.insert(a, at: 0) 136 } 137 navigationController?.pushViewController(hennsyuVc, animated: true) 138 139 } 140 override func viewWillAppear(_ animated: Bool) { 141 142 nikkiTableView.reloadData() 143 144 // TODO: ①に戻ってきたらUITableViewを再描画します。 145 if AppState.isEdited { 146 // ③から完了をタップして戻ってきた場合は②に遷移します。 147 AppState.isEdited = false 148 } 149 150 } 151 152} 153 154 155 class nikkiTableViewCell: UITableViewCell { 156 157 @IBOutlet weak var topImageView: UIImageView! 158 @IBOutlet weak var nameLabel: UILabel! 159 @IBOutlet weak var dateLabel: UILabel! 160 @IBOutlet weak var hyoukaLabel: UILabel! 161 162 override func awakeFromNib() { 163 super.awakeFromNib() 164 165} 166 override func setSelected(_ selected: Bool, animated: Bool) { 167 super.setSelected(selected, animated: animated) 168 169 } 170 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/19 06:41 編集
退会済みユーザー
2022/09/19 07:16
2022/09/19 11:06
退会済みユーザー
2022/09/19 11:11
退会済みユーザー
2022/09/19 11:46
2022/09/21 01:48