【发布时间】:2019-04-12 12:09:54
【问题描述】:
我有一个自定义的UITableViewCell,其中包含一个按钮。单击按钮时,应在UITableView 所在的ViewController 中执行某些操作(在本例中为删除单元格)。
我尝试使用delegate。
在我的自定义单元格中
protocol CellDeleterDelegate: class {
func deleteIngredAt(index:IndexPath)
func deleteReceiptAt(index:Int)
func reloadData()
}
和
weak var delegate: CellDeleterDelegate?
和
else {
print("before Delete")
delegate?.deleteIngredAt(index: indexP)
print("after Delete")
delegate?.reloadData()
print(indexP)
}
调用所需的函数(在 else 之前,我从数组中删除数据,该数组是表的数据源)
在我的ViewController 我有以下代码:
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CellDeleterDelegate{
[...]
func deleteIngredAt(index: IndexPath) {
print("reached DeleteIngred")
UIView.setAnimationsEnabled(true)
self.tableView.deleteRows(at: [index], with: .automatic)
}
func deleteReceiptAt(index:Int) {
print("reached DeleteIngred")
let indices: IndexSet = [index]
UIView.setAnimationsEnabled(true)
tableView.deleteSections(indices, with: UITableView.RowAnimation.fade)
}
func reloadData() {
print("reload reached")
tableView.reloadData()
}
但是我的ViewController 中的任何函数都没有被调用,我不知道为什么。
我之前在另一个项目中使用过它,效果很好。
【问题讨论】:
-
在 cellForRowAt cell.delegate = self 中写入以下内容
-
func reloadData()的意义何在?当您想要做的只是打印语句并重新加载 tableView -
@ZeeshanAhmed 是的,就是这样,谢谢
-
@ShubhamBakshi 只是为了重新加载数据,在我之前的项目中,在删除单元格的动画完成之前重新加载了表格,这是我的解决方法,但在这个项目中不是必需的
标签: ios swift xcode uitableview delegates