重新加载部分不会调用viewForHeaderInSection

时间:2016-04-11 23:58:52

标签: swift uitableview

我试图在选中后折叠一个部分,但我的标题消失了,我试图在ViewDidLoad中注册viewForHeaderInSection类但没有成功,这里是步骤:

在每个标题上创建按钮和目标操作 如果点击,则collapseExpand函数将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

}

1 个答案:

答案 0 :(得分:0)

我在我的项目中这样做了。我所做的是在tableview中创建一个原型单元格,并在故事板中添加标签和按钮。

创建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)
}

希望得到这个帮助。