如何在 Swift 上的单元格中添加删除按钮

Posted

技术标签:

【中文标题】如何在 Swift 上的单元格中添加删除按钮【英文标题】:How to add a delete button to Cells on Swift 【发布时间】:2021-12-27 07:35:05 【问题描述】:

我正在尝试创建一个应用程序,但我遇到了一个简单的问题:如何向我的自定义单元格添加删除按钮?

    我创建了一个 NewCocoaTouchClass

    我已经创建了我的自定义设计(还为每个单元格添加了一个按钮)并在 TableViewCellController 中提供了 Outlets

    我设法将我的自定义单元格实现到另一个 viewController

    我在 viewController 上创建了一个按钮

我希望当用户点击我的新按钮时,会出现单元格按钮,然后我可以单独删除单元格。当我创建 IbAction 时,我无法检索单元格代码,因为该单元格仅在我的 tableViewCode 中定义。

提前致谢

Ps:我还实现了通过滑动删除单元格,但我的自定义单元格设计与标准矩形删除选项不兼容(这很糟糕)。

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
    
    

视图控制器

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) 
    

【问题讨论】:

检查这个.. ***.com/a/54303051/6783598 您可以在 cellForAtIndexpath 中为每个按钮添加按钮标签并制作委托,从 cellForAtIndexpath 方法传递委托引用。当按钮单击时,您必须检查按钮标签并删除按钮。在单元格中,您必须调用委托,一旦您删除按钮,主类将通过委托知道删除操作,然后您必须在委托一致性类中重新加载表格视图 @Jok3r 这几乎是 Swift 中最糟糕的选择。更好的方法是将单元格和实际索引路径传递回控制器的回调闭包。这避免了通过重新加载表格视图来更新所有标签。 @ Saucer21 滑动操作有什么问题? 相关:***.com/questions/46378515/… @vadian 我们不能使用 didSelectRowAtIndexPath 吗? 【参考方案1】:

这是我在项目中使用的代码

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
    

【讨论】:

【参考方案2】:

你可以用添加目标来写

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)
    

【讨论】:

以上是关于如何在 Swift 上的单元格中添加删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Swift 中表格视图单元格中的默认删除按钮?

swift UIViewController用于自定义单元格中的按钮

如何使用 Swift 在集合视图单元格中添加表视图?

如何在选择单元格上的 UIcollectionViewCell 特定单元格中删除长手势?

如何在 swift 3 中的 tableview 单元格中添加带有自定义视图的 collectionView?

在 Swift 中设置 UICollectionView 删除按钮