如何在 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 UIViewController用于自定义单元格中的按钮
如何在选择单元格上的 UIcollectionViewCell 特定单元格中删除长手势?