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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

受付中

DKImagePickerController画面遷移

coco7777
coco7777

総合スコア8

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0リアクション

0クリップ

147閲覧

投稿2022/09/19 02:31

DKImagePickerControllerでライブラリから取得した複数の画像をphots(配列)に入れて
tableViewのあるcontrollerの配列に渡しcellを生成したいです。
さらにcellをタップし画面遷移する時に、DKImagePickerController→tableViewのあるcontrollerと渡した複数の画像を
さらに渡してColection Viewに表示したいと考えています。
しかし、cellを生成する時にindex.rowを使うと複数枚の画像を渡すことができないと思います。
複数渡したいものがある場合配列は向かないのでしょうか?
画像選択の最大数が5枚なので5つの配列を用意して1枚ずつ別の配列に入れて渡すことも考えました。

分かりにくい説明になり申し訳ありませんが、知識のあるかた解決方法を回答お願いします。

swift

import UIKit import DKImagePickerController class hennsyuViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UITextFieldDelegate, UITextViewDelegate { var completButtonItem:UIBarButtonItem! @IBOutlet weak var textField: UITextView! @IBOutlet weak var dateField: UITextField! @IBOutlet weak var hyoukaField: UITextField! @IBOutlet weak var addressField: UITextField! @IBOutlet weak var nameField: UITextField! var callback1: ((String) -> Void)! var callback2: ((String) -> Void)! var callback3: ((String) -> Void)! var callback4: ((String) -> Void)! var callback5: ((String) -> Void)! var callback6: ((String) -> Void)! var photos: [UIImage] = [] var nikkiImage = UIImage() // 実際に選択された枚数 var selectedCount = 0 let pickerController = DKImagePickerController() override func viewDidLoad() { super.viewDidLoad() dateField.delegate = self hyoukaField.delegate = self addressField.delegate = self nameField.delegate = self textField.delegate = self completButtonItem = UIBarButtonItem(title: "完了", style: .done, target: self, action: #selector(completButtonTapped(_:))) self.navigationItem.rightBarButtonItem = completButtonItem } @IBAction func addImageButton(_ sender: Any) { pickerController.maxSelectableCount = 5 //カメラモード、写真モードの選択 pickerController.sourceType = .photo //キャンセルボタンの有効化 pickerController.showsCancelButton = true pickerController.UIDelegate = CustomUIDelegate() // pickerController.didSelectAssets = { (assets: [DKAsset]) in // } // } pickerController.didSelectAssets = { (assets: [DKAsset]) in for asset in assets { asset.fetchFullScreenImage(completeBlock: { (image, info) in self.photos.append(image!) }) } } pickerController.modalPresentationStyle = .fullScreen present(pickerController, animated: true, completion: nil) } @objc func kbDoneTaped (_ sender:UIButton){ self.view.endEditing(true) } //完了ボタンを押した時 @objc func completButtonTapped(_ sender: UIBarButtonItem){ let name = nameField.text let date = dateField.text let hyouka = hyoukaField.text let text = textField.text let address = addressField.text if let n = navigationController, n.viewControllers[n.viewControllers.count - 2] is nikkiTableViewController { // ①から遷移してきた場合は完了をタップしたことを表すフラグを設定します。 AppState.isEdited = true callback1(name!) callback2(date!) callback3(hyouka!) callback4(text!) callback5(address!) print("Nikki呼ばれた") } navigationController?.popViewController(animated: true) } }

swift

import UIKit class nikkiTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate{ private let cellId = "cellId" var addBarButtonItem:UIBarButtonItem! var topImageArray = [UIImage]() var nameArray = [String?]() var dateArray = [String?]() var hyoukaArray = [String?]() var textViewArray = [String?]() var addressArray = [String?]() var practice: String? @IBOutlet weak var nikkiTableView: UITableView! override func viewDidLoad() {super.viewDidLoad() setupSearchBar() addBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addBarButtonTapped(_:))) addBarButtonItem.tintColor = UIColor.white //navigationVarの右側に追加 self.navigationItem.rightBarButtonItem = addBarButtonItem nikkiTableView.delegate = self nikkiTableView.dataSource = self let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = .rgb(red: 173, green: 216, blue: 230) //標準の高さ navigationItem.standardAppearance = appearance //ナビゲーションバーが透過する navigationItem.scrollEdgeAppearance = appearance //標準の文字の大きさ navigationItem.compactAppearance = appearance let tapGesture = UITapGestureRecognizer( target: self, action: #selector(dismissKeyboard)) view.addGestureRecognizer(tapGesture) tapGesture.cancelsTouchesInView = false } @objc func dismissKeyboard() { navigationItem.titleView?.endEditing(true) } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 190 } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return nameArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = nikkiTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! nikkiTableViewCell if let c = cell as? nikkiTableViewCell { c.nameLabel.text = nameArray[indexPath.row] c.dateLabel?.text = dateArray[indexPath.row] c.hyoukaLabel?.text = hyoukaArray[indexPath.row] } return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let storyboard = UIStoryboard(name: "nikkiTableView", bundle: nil) let textVC = storyboard.instantiateViewController(withIdentifier: "textViewController") as! textViewController textVC.name = nameArray[indexPath.row] textVC.address = addressArray[indexPath.row] textVC.hyouka = hyoukaArray[indexPath.row] textVC.date = dateArray[indexPath.row] textVC.text = textViewArray[indexPath.row] navigationController?.pushViewController(textVC, animated: true) //タップした後、セルの色が白色に戻る tableView.deselectRow(at: indexPath, animated: true) navigationItem.titleView?.endEditing(true) } @objc func addBarButtonTapped(_ sender: UIBarButtonItem) { let hennsyuVc = storyboard?.instantiateViewController(withIdentifier: "hennsyuViewController") as! hennsyuViewController hennsyuVc.callback1 = {n in self.nameArray.insert(n, at: 0) } hennsyuVc.callback2 = {d in self.dateArray.insert(d, at: 0) } hennsyuVc.callback3 = {h in self.hyoukaArray.insert(h, at: 0) } hennsyuVc.callback4 = {t in self.textViewArray.insert(t, at: 0) } hennsyuVc.callback5 = {a in self.addressArray.insert(a, at: 0) } navigationController?.pushViewController(hennsyuVc, animated: true) } override func viewWillAppear(_ animated: Bool) { nikkiTableView.reloadData() // TODO: ①に戻ってきたらUITableViewを再描画します。 if AppState.isEdited { // ③から完了をタップして戻ってきた場合は②に遷移します。 AppState.isEdited = false } } } class nikkiTableViewCell: UITableViewCell { @IBOutlet weak var topImageView: UIImageView! @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var dateLabel: UILabel! @IBOutlet weak var hyoukaLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています