- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
   
      static NSString *HeaderIdentifier = @"header";
   
       headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier];
        
       if ( headerView == nil)
      {
             headerView = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:HeaderIdentifier];
            ............
      }
这样定义以后,在调用reloadData后发现还是全部是新建的headerView,没有一个重用的。
怎么解释?

解决方案 »

  1.   

    有几个 Section?如果所有的 Section 一屏可以放下,那就没有重用了。
      

  2.   

    正常情况下重用机制用的最多是你的记录被移动到屏幕之外,又重新移动回屏幕内的时候用到
    reloadData情况比较特殊,如果你的数据模型被改变过,自然之前的cell 是不能用了,所以肯定会重画,如果模型没有变化的话可能会重用到,ios已经优化了很好了
      

  3.   

    谢谢楼上两位的回答,headerView被移动到屏幕之外,又重新移回屏幕内的时候可以重用,就是调用reloadData时没有重用。我实现的是一个类似QQ好友列表类似的功能,headerView上面加了一个button,当点击button的时候,改变numberOfRowsInSection的返回值,同时调用reloadData,实现展开和折叠好友列表。如图所示
      

  4.   

    你reloadData的时候viewForHeaderInSection被调用了几次?
    屏幕上有几个header可见?
      

  5.   

    11个header可见,reloadData的时候viewForHeaderInSection被调用了11次。就是reloadData以后,不管header全部重建,没有重用。
      

  6.   

            headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier]; 你在 header 的方法里面 去    检测  footer   能行吗?
      

  7.   

    楼主,执行reloadData,怎么使header重用,不要被初始化,因为我执行1次relaodData  header的位置不能变化,但数据要变,怎么搞啊