tableview标题子视图在重新加载部分时消失

时间:2016-04-12 05:17:19

标签: ios swift uitableview tableview

我想通过点击它的标题来创建一个可扩展的tableview,我有一个在viewForHeaderInSection中调用的headerfooterview类来实现标题,并且在我尝试重新加载该部分之前看起来很好,当该部分折叠时子视图消失。

这里有一些代码

    override func viewDidLoad() {

    super.viewDidLoad()

    tableView.registerClass(CustomHeaderTableViewCell.self, forHeaderFooterViewReuseIdentifier: "header")
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return data.count

     }

    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: .None)

     }
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
         let header: CustomHeaderTableViewCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("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)

         header.textLabel!.text = "TRENDS"

      return header 
    }

2 个答案:

答案 0 :(得分:1)

标题的子视图(在这种情况下,您的按钮消失了)的原因是方法func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?中的headerView的高度不正确

headerView的高度仍然等于零(宽度也等于零),因此,当您的代码执行button.frame = header.bounds时,高度将被设置为零,宽度也将被设置为零。在屏幕上看到。

要解决此问题,您可以使用CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 30)之类的固定矩形来设置按钮的边框。

答案 1 :(得分:0)

不是从原型单元格填充标题,而是为标题视图创建单独的.XIB并从中填充标题视图。它会起作用。