Group Group Group Group Group Group Group Group Group

Delete table view cell via button in it

I want to delete a tableview cell row when the button deleteButton is triggered. You can see exactly what I am looking for in the gif below. When the user taps the deleteButton is should call the func didDelete. Right now if you press the button nothing happens. And every time the delete button is called it should delete the cell which the button was in.

Gif of what I am lookin for

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    private var myArray: [String] = ["First"]
     var myTableView =  UITableView()

    override func viewDidLoad() {

        myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
        myTableView.dataSource = self
        myTableView.delegate = self
        myTableView.translatesAutoresizingMaskIntoConstraints = false
        myTableView.register(MyCell.self, forCellReuseIdentifier: "MyCell")


                   myTableView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.90),
                   myTableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1),
                   myTableView.topAnchor.constraint(equalTo: view.topAnchor),
                   myTableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),


    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Num: \(indexPath.row)")
        print("Value: \(myArray[indexPath.row])")

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

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

        cell.buttonTapCallback = { [weak self] in
               guard let self = self else { return }

        cell.didDelete = { [weak self] in
               guard let self = self else { return }


           return cell


class MyCell: UITableViewCell {
    var buttonTapCallback: () -> ()  = { }
     var didDelete: () -> ()  = { }
    let button: UIButton = {
        let btn = UIButton()
        btn.setTitle("Button", for: .normal)
        btn.backgroundColor = .systemPink
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 14)
        return btn
    let deleteButton: UIButton = {
         let btn = UIButton()
         btn.setTitle("Delete", for: .normal)
        btn.backgroundColor = .green
         btn.titleLabel?.font = UIFont.systemFont(ofSize: 14)
         return btn
    let label: UILabel = {
       let lbl = UILabel()
        lbl.font = UIFont.systemFont(ofSize: 16)
        lbl.textColor = .systemPink
       return lbl
    @objc func didTapButton() {
    @objc func didTapDelete() {
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        //Add button
        button.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
           deleteButton.addTarget(self, action: #selector(didDelete), for: .touchUpInside)
        //Set constraints as per your requirements
        button.translatesAutoresizingMaskIntoConstraints = false
        button.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 20).isActive = true
        button.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10).isActive = true
        button.widthAnchor.constraint(equalToConstant: 100).isActive = true
        button.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10).isActive = true

        //Set constraints as per your requirements
        deleteButton.translatesAutoresizingMaskIntoConstraints = false
        deleteButton.leadingAnchor.constraint(equalTo: label.trailingAnchor, constant: 20).isActive = true
        deleteButton.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10).isActive = true

        deleteButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10).isActive = true
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")

@timswift Do you still have issues with this?

This topic was automatically closed after 166 days. New replies are no longer allowed.