swift初学者です。
ナビゲーションバーに+ボタンを追加して、そのボタンを押すとtable Viewのcellが追加されるようにしたいです。
画像にあるようにidentifierにcell Idと設定している、imageViewとLabelを3つ載せたセルを追加したいです。
説明不足でわかりにくいかもしれませんが、回答お願いします。
swift
import UIKit class nikkiTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { private let cellId = "cellId" var cellArray = NSMutableArray.init() var addBarButtonItem:UIBarButtonItem! var searchButtonItem:UIBarButtonItem! @IBOutlet weak var nikkiTableView: UITableView! override func viewDidLoad() { super.viewDidLoad() addBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addBarButtonTapped(_:))) addBarButtonItem.tintColor = UIColor.white searchButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(searchButtonTapped(_:))) searchButtonItem.tintColor = UIColor.white //navigationVarの右側に追加 self.navigationItem.rightBarButtonItem = addBarButtonItem self.navigationItem.leftBarButtonItem = searchButtonItem 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 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 190 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.cellArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = nikkiTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) return self.cellArray.object(at: indexPath.row) as! UITableViewCell } 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) } //+ボタンが押されたときのメゾットー>cellの追加を書く @objc func addBarButtonTapped(_ sender: UIBarButtonItem) { } @objc func searchButtonTapped(_ sender: UIBarButtonItem){ } } class nikkiTableViewCell: UITableViewCell { @IBOutlet weak var cafeImageView: 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) } }
cellArray にセルを格納してるようですが、セルは必要に応じて TableView が管理するので、その必要はないというか、そんなことをしてはいけません。
代わりに、データを管理する配列を用意しましょう。
Hoshi-takanoriさん 回答ありがとうございます。
データを管理する配列を作ると+ボタンを押したときにcellが追加されるというのが可能になるということでしょうか?
データを管理する配列を用意した後の手順を教えていただきたいです。
> `@objc func addBarButtonTapped(_ sender: UIBarButtonItem) {`
ボタンをタップしたときのメソッドの中の処理は次のリンクが参考になるかもしれません。
https://stackoverflow.com/questions/31870206/how-to-insert-new-cell-into-uitableview-in-swift?answertab=scoredesc#40785450
xg63ex2bさん 前回に続いて回答ありがとうございます!!!
参考にさせていただきます
ありがとうございます
まだ回答がついていません
会員登録して回答してみよう