Edited at

【Swift】セルのボタンタップ時にタグ無しでセルの情報を取得する

More than 1 year has passed since last update.

テーブルビューのセルにボタンを設置してボタンタップ時にセルの情報を取得したかったのですが、タグを使えば簡単にできるもののタグ番号って何を表しているかがぱっと見でわかりずらいので使用を禁じられたので、別の方法で取得してみました。


Protocol

protocol CustomCellDelegate {

func customCell(didPushButton customCell: CustomCell)
}


CustomCell

class CustomCell: UITableViewCell{

var data: [String: Any]?
var delegate: CustomCellDelegate?

override func awakeFromNib() {
}
@IBAction func pushButton(_ sender: Any) {
self.delegate?.customCell(didPushButton: self)
}
}



ViewController

ViewController: UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

var data: [[String: Any]] = []

override func viewDidLoad() {
super.viewDidLoad()

self.tableView.delegate = self
self.tableView.dataSource = self

let nib = UINib(nibName: "CustomCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "CustomCell")

for id in 1...5 {
self.data.append([
"id": id
])
}
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.data.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as! CustomCell

cell.delegate = self
cell.data = self.data[indexPath.row]

return cell
}
}

extension ViewController: CustomCellDelegate {
func customCell(didPushButton customCell: CustomCell) {
guard let row = self.tableView.indexPath(for: customCell)?.row else {
return
}

print(customCell.data!["id"])
}
}


こっちの方がぱっと見わかりにくいのでは…🤔