はじめに
躓きやすいポイントだと思うので、記事に残しておきます。
いくつか方法があると思いますが、Delegateを使うパターンでいきます。
準備
CustomCellの作成
クラスの作成
class CustomCell: UITableViewCell {
override class func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
セルのカスタムクラスを設定
ButtonをAction接続
class CustomCell: UITableViewCell {
override class func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
@IBAction func onButtonClick(_ sender: Any) {
}
}
Delegateを作成
//追加
protocol CustomCellDelegate {
func customCellDelegateDidTapButton(cell: UITableViewCell)
}
class CustomCell: UITableViewCell {
var delegate: CustomCellDelegate? //追加
override class func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
@IBAction func onButtonClick(_ sender: Any) {
delegate?.customCellDelegateDidTapButton(cell: self) //追加
}
}
ViewController側からの呼び出し
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "Cell")
tableView.dataSource = self
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell
cell.delegate = self
return cell
}
}
extension ViewController: CustomCellDelegate {
func customCellDelegateDidTapButton(cell: UITableViewCell) {
//タップされたときの処理
}
}
以上です。