viewforHeaderInSection

viewforHeaderInSection

我试图折叠选定的部分,但标题消失了,我试图在ViewDidLoad中注册viewForHeaderInSection类,但没有成功,这些步骤如下:

在每个标题上创建一个按钮和一个目标动作
如果点按了,expandingExpand函数会将section中的行数设置为0,然后以正确的索引(发送者按钮标签)调用reloadsections。

不幸的是,一旦重新加载,就不会调用viewForHeaderInSection,并且标题消失。

有什么帮助吗?

 override func viewDidLoad() {

    super.viewDidLoad()

    // reistering headerfooterview class
    tableView.registerClass(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "header")

}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    if hookMode {
        //   print (data.count)
        return data.count
    } else {
        return 1
    }

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


    if section == selectedSection {
         return 0
    } else {

        return data[section].count

    }

}

func expandCollapse(sender: UIButton) {

    self.selectedSection = sender.tag

    tableView.reloadSections(NSIndexSet( index: sender.tag ), withRowAnimation: .Bottom)

}



func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header: CustomHeaderTableViewCell = tableView.dequeueReusableCellWithIdentifier("header") as! CustomHeaderTableViewCell
    let button   = UIButton(type: UIButtonType.System) as UIButton
    button.frame = header.bounds
    button.backgroundColor = UIColor.greenColor()
    button.setTitle("Test Button", forState: UIControlState.Normal)
    button.addTarget(self, action: #selector(MainWitness.expandCollapse), forControlEvents: UIControlEvents.TouchUpInside)
    button.tag = section
    header.addSubview(button)

    if hookMode {
        // print( hookedUsernames[section] )
        header.sectionHeaderLabel.text = hookedUsernames[section]
    } else {
        header.sectionHeaderLabel.text = "TRENDS"
    }
    return header

}

最佳答案

我在我的项目中做到了这一点。我所做的是在表格视图中创建了一个原型单元,并在情节提要中添加了标签和一个按钮。

创建的Tableviewcell类

class mainTableHeaderViewCell: UITableViewCell {

@IBOutlet weak var _btnShowHide: UIButton!
@IBOutlet weak var _lblSectionHeaderName: UILabel!
}


在控制器中

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let header = tableView.dequeueReusableCellWithIdentifier("mainTableHeaderViewCell")! as! mainTableHeaderViewCell
    header._lblSectionHeaderName.text = objTempDeficiencyList[section][0].sectionName
    // sectionNameList[section].DESCRIPTION
    header._btnShowHide.addTarget(self, action: "hideSection:", forControlEvents: .TouchUpInside)
    if hiddenSections.contains(section) {
        header._btnShowHide.setImage(UIImage(named: "expand"), forState: UIControlState.Normal)
    }
    else {
        header._btnShowHide.setImage(UIImage(named: "uparrow"), forState: UIControlState.Normal)
    }

    header._btnShowHide.tag = section
    return header.contentView
}

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 40
}

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if hiddenSections.contains(section) {
        return 0
    }
    return List[section].count // getRowCount(section)
}


希望对您有所帮助。

10-08 08:05