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

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

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

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

解決済

画面遷移時に配列に追加しCellを生成したい

coco7777
coco7777

総合スコア7

Swift

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

1回答

0リアクション

1クリップ

190閲覧

投稿2022/07/28 10:48

画面遷移をする時にtextFieldの値を渡し、配列に追加してTableViewcellに表示させたいです。
具体的にはnikkitableViewControllerで『+』ボタンを押すと、hennsyuViewControllerに遷移し
そこでtextFieldに入力します。その後『完了』ボタンを押すことでnikkitableViewControllerにある配列に追加して、画面遷移しCellを生成したいです。
3画面構成になっているのですが、nikkitableViewController→ hennsyuViewController→ nikkitableViewControlleの流れの時だけ配列に追加したいです。
コードを書いてみたのですがCellが生成されず困っています。
文字数の都合で2番目の画面コード以下に記載します。

swift

import UIKit class nikkiTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate{ private let cellId = "cellId" var addBarButtonItem:UIBarButtonItem! // var tableViewCell = nikkiTableViewCell() var topImageArray = [UIImage]() var nameArray = [String]() var dateArray = [String]() var hyoukaArray = [String]() var textViewArray = [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 } func setupSearchBar(){ if let navigationBarFrame = navigationController?.navigationBar.bounds { let searchBar: UISearchBar = UISearchBar(frame: navigationBarFrame) searchBar.delegate = self searchBar.placeholder = "タイトルで探す" searchBar.tintColor = UIColor.white searchBar.keyboardType = UIKeyboardType.default navigationItem.titleView = searchBar navigationItem.titleView?.frame = searchBar.frame } } @objc func dismissKeyboard() { navigationItem.titleView?.endEditing(true) } func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { searchBar.resignFirstResponder() } 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 //cell.topImageView?.image = topImageArray[indexPath.row] cell.nameLabel?.text = nameArray[indexPath.row] cell.dateLabel?.text = dateArray[indexPath.row] cell.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") //値、参照渡しのコードを書く 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 navigationController?.pushViewController(hennsyuVc, animated: true) } override func viewWillAppear(_ animated: Bool) { nikkiTableView.reloadData() // TODO: ①に戻ってきたらUITableViewを再描画します。 if AppState.isEdited { // ③から完了をタップして戻ってきた場合は②に遷移します。 AppState.isEdited = false let textvc = storyboard?.instantiateViewController(withIdentifier: "textViewController") as! textViewController //textvc.nameField = nameArray navigationController?.pushViewController(textvc, animated: true) } } } 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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

coco7777

2022/07/28 10:48

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 photos: [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 // checkpermission.checkCamera() let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = .rgb(red: 173, green: 216, blue: 230) navigationController?.navigationBar.tintColor = UIColor.white //標準の高さ navigationItem.standardAppearance = appearance //ナビゲーションバーが透過する navigationItem.scrollEdgeAppearance = appearance //標準の文字の大きさ navigationItem.compactAppearance = appearance completButtonItem = UIBarButtonItem(title: "完了", style: .done, target: self, action: #selector(completButtonTapped(_:))) self.navigationItem.rightBarButtonItem = completButtonItem dateField.setUnderLine() hyoukaField.setUnderLine() addressField.setUnderLine() nameField.setUnderLine() let toolBar = UIToolbar() toolBar.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40) let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) let kbDoneButton = UIBarButtonItem(title: "閉じる", style: .done, target: self, action:#selector(kbDoneTaped) ) toolBar.items = [spacer,kbDoneButton] textField.inputAccessoryView = toolBar } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) NotificationCenter.default.addObserver(self, selector: #selector(hennsyuViewController.keyboardShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(hennsyuViewController.keyboardHide(_:)), name: UIResponder.keyboardDidHideNotification, object: nil) } @IBAction func addImageButton(_ sender: Any) { pickerController.maxSelectableCount = 5 //カメラモード、写真モードの選択 pickerController.sourceType = .photo //キャンセルボタンの有効化 pickerController.showsCancelButton = true //pickerController.UIDelegate = CustomUIDelegate() pickerController.didSelectAssets = { (assets: [DKAsset]) in print("didSelectAssets"); print(assets) //assetsのカウントがnilでないとき実行 // if assets.count > 0 { // // } } pickerController.modalPresentationStyle = .fullScreen present(pickerController, animated: true, completion: nil) } func textFieldShouldReturn(_ textField: UITextField) -> Bool { dateField.resignFirstResponder() hyoukaField.resignFirstResponder() addressField.resignFirstResponder() nameField.resignFirstResponder() return true } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){ self.view.endEditing(true) } @objc func keyboardShow(_ notification: Notification){ if !textField.isFirstResponder { return } if self.view.frame.origin.y == 0 { if let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { self.view.frame.origin.y -= keyboardRect.height } } } @objc func keyboardHide(_ notification: Notification){ if self.view.frame.origin.y != 0 { self.view.frame.origin.y = 0 } } @objc func kbDoneTaped (_ sender:UIButton){ self.view.endEditing(true) } //完了ボタンを押した時 @objc func completButtonTapped(_ sender: UIBarButtonItem){ if let n = navigationController, n.viewControllers[n.viewControllers.count - 2] is nikkiTableViewController { // ①から遷移してきた場合は完了をタップしたことを表すフラグを設定します。 AppState.isEdited = true } navigationController?.popViewController(animated: true) } override func viewWillDisappear(_ animated: Bool) { if AppState.isEdited { let nikkiVC = storyboard?.instantiateViewController(withIdentifier: "nikkiTableViewController") as! nikkiTableViewController nikkiVC.nameArray.append(nameField.text!) nikkiVC.dateArray.append(nameField.text!) nikkiVC.hyoukaArray.append(hyoukaField.text!) nikkiVC.textViewArray.append(textField.text!) } } }

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Swift

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