如何获得对使用.xib文件创建的自定义UITableView标头的引用?

时间:2018-08-09 12:22:58

标签: ios swift uitableview

我的表格视图有一个单独的.xib文件,用于:单元格和标题。两者都是UITableViewCell的子类。我通过调用viewForHeaderInSection UITableViewDelegate的委托方法来设置标题,并且一切正常,直到必须向所述标题添加按钮为止。

我想在每次点击后更新按钮的图像,但是要做到这一点,我需要引用按钮所在的标题。我知道可以通过调用myTableView.headerView(forSection:)来获取标题的引用,但是该方法返回UITableViewHeaderFooterView?的实例,因为自从'UITableViewHeaderFooterView投射以来,我无法访问标题的按钮? '我的自定义子类UITableViewCell总是失败。

如何获得对点击按钮的标题的引用?


编辑:

最后,我给出了@shivi_shub答案,但没有在标头的按钮中添加目标,而是使用了闭包:

  1. 在我的自定义标头类(UITableViewCell的子类)中,我为按钮创建了一个动作和一个插座。我还添加了一个附加变量var expandCompletionHandler: ((UITableViewCell) -> Void)? = nil。在按钮的操作中,我将self传递给创建的闭包(expandCompletionHandler(self))

  2. 在设置标题视图之后,在viewForHeaderInSection的ViewController类(表视图所在的位置)中,我将闭包分配给了先前创建的变量,如下所示:

    header.expandCompletionHandler = {                 如果header.expandBtn.tag ==部分{                     //在此更改按钮图片                 }

2 个答案:

答案 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
}