我的表格视图有一个单独的.xib文件,用于:单元格和标题。两者都是UITableViewCell的子类。我通过调用viewForHeaderInSection
UITableViewDelegate的委托方法来设置标题,并且一切正常,直到必须向所述标题添加按钮为止。
我想在每次点击后更新按钮的图像,但是要做到这一点,我需要引用按钮所在的标题。我知道可以通过调用myTableView.headerView(forSection:)
来获取标题的引用,但是该方法返回UITableViewHeaderFooterView?
的实例,因为自从'UITableViewHeaderFooterView投射以来,我无法访问标题的按钮? '我的自定义子类UITableViewCell
总是失败。
如何获得对点击按钮的标题的引用?
编辑:
最后,我给出了@shivi_shub答案,但没有在标头的按钮中添加目标,而是使用了闭包:
在我的自定义标头类(UITableViewCell的子类)中,我为按钮创建了一个动作和一个插座。我还添加了一个附加变量var expandCompletionHandler: ((UITableViewCell) -> Void)? = nil
。在按钮的操作中,我将self传递给创建的闭包(expandCompletionHandler(self))
在设置标题视图之后,在viewForHeaderInSection
的ViewController类(表视图所在的位置)中,我将闭包分配给了先前创建的变量,如下所示:
header.expandCompletionHandler = { 如果header.expandBtn.tag ==部分{ //在此更改按钮图片 }
答案 0 :(得分:2)
将Target添加到viewForHeaderInSection方法中的标题按钮-
header.button.tag = section
header.button.addTarget(self, action:
#selector(YourViewController.btnClicked(_:)),
for: UIControlEvents.touchUpInside)
@objc func btnClicked(_ sender: UIButton) {
//check button tag here
}
答案 1 :(得分:0)
您需要将HeaderFooterView强制转换为自定义类。
let headerView = myTableView.headerView(forSection:)
if let = headerView as? MyHeaderViewClass {
headerView.myProperty = someValue
}