该应用的屏幕截图:
我有一个“ x”按钮,用于删除表中表中的TableViewCell。在单击按钮时,我想删除该单元格,因此我需要知道按钮单击的2个索引,如果是第一个表格视图,则该行,然后在该表格视图中单击该按钮的单元格的行。 。我只有发件人。
为了更清楚一点,在屏幕截图中,如果有人单击福特福特嘉年华下的x,我需要为“ subtableview”获取索引路径0,为tableview获取索引路径1,这样我就知道要删除此元素从表数据源。
我成功做到了:
var cell = sender.superview
while (cell != nil) && !((cell?.isKind(of: CustomCell.self))!) {
cell = cell?.superview
}
let tbl = cell?.superview as! UITableView
let indexPath = tbl.indexPath(for: (cell as? UITableViewCell)!
)
愚蠢的事情是我必须做两次,一次是在“ sub”表视图中查找单元格的索引,然后再次是在tableview中查找“ subtableview”的索引。
有更好的方法吗?是否有办法让buttonClick触发didSelectRowAt并向其添加发送方对象(所以我知道单击了按钮而不是选中单元格)?
EDIT 我忘了提到第一个表视图在单击时打开和关闭,因此主表视图具有2种不同的单元格类型,一种是关闭的(因此没有嵌套的表视图),然后是onselect中的一行该表格视图中,该单元格被替换为其中包含另一个表格视图的详细单元格,这就是为什么分段表格视图不是解决方案的原因(据我所知,我是新来的人)
答案 0 :(得分:0)
一种实现方法是使用闭包。您可以使用闭包设置单元格,然后调用它。差不多是这样的:
class CellWithClosure: UITableViewCell {
var button: UIButton = UIButton()
var closureForButton: (Void) -> Void
func setupCell(closureForButton: @escaping (Void) -> Void) {
self.closureForButton = closureForButton
button.addTarget(self, action: #selector(buttonAction), for: UIControlEvents.touchUpInside)
}
@objc func buttonAction() {
closureForButton()
}
}