Home > OS >  How to add a delete button to Cells on Swift
How to add a delete button to Cells on Swift

Time:12-28

I'm trying to create an App but I'm struggling with a simple problem: How can I add a delete button to my custom cells?

  1. I've created a NewCocoaTouchClass

  2. I've created my custom design (added also a button for every cell) and provided the Outlets in the TableViewCellController

  3. I managed to implement my custom cell to another viewController

  4. I created a button on my viewController

I'd like that when the user taps on my new button, cell buttons will appear, and then I can delete cells singularly. When I create the IbAction I can't retrieve the cell code because the cell is defined only in my tableViewCode.

Thank in advance

Ps: I also implemented deleting cells by swipe but my custom cell design is incompatible with the standard rectangular delete option (this is awful).

TableViewCellController

import UIKit

class CustomTableTableViewCell: UITableViewCell {
    
    static let identificatore = "CustomTableTableViewCell"
    static func nib() -> UINib {
        return UINib(nibName: "CustomTableTableViewCell", bundle: nil)
    }

    @IBOutlet weak var ImmagineCella: UIImageView!
    @IBOutlet weak var TestoCella: UILabel!
    @IBOutlet weak var Button: UIButton!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    
}

ViewController

import UIKit

class MaterieViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var materie : [String] = ["zoifvdhfdv", "szvzv", "zdvzfv", "zfdvbfdb", "bfzdfb"]
    
    @IBOutlet weak var TableViewMaterie: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        TableViewMaterie.register(CustomTableTableViewCell.nib(), forCellReuseIdentifier: CustomTableTableViewCell.identificatore)
        
        TableViewMaterie.delegate = self
        TableViewMaterie.dataSource = self
        
        
       
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return materie.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableTableViewCell.identificatore, for: indexPath) as! CustomTableTableViewCell
        cell.TestoCella.text = materie[indexPath.row]
       
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 67.83
    }
    
    @IBAction func EditButton(_ sender: UIButton) {
    }
}

CodePudding user response:

This is the code I use in my project

func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String?
{
     return "Delete"
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == .delete) {
        //Add your code
    }
}

CodePudding user response:

You can write with add target

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableTableViewCell.identificatore, for: indexPath) as! CustomTableTableViewCell
        cell.TestoCella.text = materie[indexPath.row]
        cell. Button.tag = indexPath.row
        cell. Button.addTarget(self, action: #selector(buttonClicked(sender:)), for: .touchUpInside)

        return cell
    }

func buttonClicked(sender: UIButton) {
        let buttonRow = sender.tag
        print(buttonRow)
    }
  • Related