swift初学者です。
ナビゲーションバーに+ボタンを追加して、そのボタンを押すとtable Viewのcellが追加されるようにしたいです。
画像にあるようにidentifierにcell Idと設定している、imageViewとLabelを3つ載せたセルを追加したいです。
説明不足でわかりにくいかもしれませんが、回答お願いします。
swift
1import UIKit 2 3class nikkiTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 4 5 private let cellId = "cellId" 6 var cellArray = NSMutableArray.init() 7 8 var addBarButtonItem:UIBarButtonItem! 9 var searchButtonItem:UIBarButtonItem! 10 11 @IBOutlet weak var nikkiTableView: UITableView! 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 17 18 19 addBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addBarButtonTapped(_:))) 20 addBarButtonItem.tintColor = UIColor.white 21 22 searchButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(searchButtonTapped(_:))) 23 searchButtonItem.tintColor = UIColor.white 24 25 26 //navigationVarの右側に追加 27 self.navigationItem.rightBarButtonItem = addBarButtonItem 28 self.navigationItem.leftBarButtonItem = searchButtonItem 29 30 nikkiTableView.delegate = self 31 nikkiTableView.dataSource = self 32 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 } 46 47 48 49 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 50 51 return 190 52 53 54 } 55 56 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 57 58 return self.cellArray.count 59 } 60 61 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 62 63 let cell = nikkiTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) 64 65 return self.cellArray.object(at: indexPath.row) as! UITableViewCell 66 } 67 68 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 69 70 let storyboard = UIStoryboard(name: "nikkiTableView", bundle: nil) 71 let textVC = storyboard.instantiateViewController(withIdentifier: 72 "textViewController") 73 74 navigationController?.pushViewController(textVC, animated: true) 75 //タップした後、セルの色が白色に戻る 76 tableView.deselectRow(at: indexPath, animated: true) 77 78 } 79 80 //+ボタンが押されたときのメゾットー>cellの追加を書く 81 @objc func addBarButtonTapped(_ sender: UIBarButtonItem) { 82 83 84 85 86 87 88 89 } 90 91 @objc func searchButtonTapped(_ sender: UIBarButtonItem){ 92 93 94 } 95 96 97 98 99 100 101 } 102 103 class nikkiTableViewCell: UITableViewCell { 104 105 106 @IBOutlet weak var cafeImageView: UIImageView! 107 @IBOutlet weak var nameLabel: UILabel! 108 @IBOutlet weak var dateLabel: UILabel! 109 @IBOutlet weak var hyoukaLabel: UILabel! 110 111 112 override func awakeFromNib() { 113 super.awakeFromNib() 114 115 116 } 117 118 override func setSelected(_ selected: Bool, animated: Bool) { 119 super.setSelected(selected, animated: animated) 120 } 121 122 123 124 } 125
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さん 前回に続いて回答ありがとうございます!!!
参考にさせていただきます
ありがとうございます
あなたの回答
tips
プレビュー