美文网首页
UITableView复用HeaderView刷新问题

UITableView复用HeaderView刷新问题

作者: Michale_Zuo | 来源:发表于2018-11-21 19:32 被阅读0次

 最近项目业务需求,在某个页面采用的是UITableView进行布局,用到了HeaderView,以前很少用到UITableViewHeaderFooterView,开发的这个API可以达到header,footer的复用。于是我很高兴的去子类化UITableViewHeaderFooterView进行布局。

@interface TestHeaderView : UITableViewHeaderFooterView
@end

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    TestHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:reuseHeaderId];
    if (header == nil) {
        header = [[TestHeaderView alloc]initWithReuseIdentifier:reuseHeaderId];
    }
    return header;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 20;
}

但是,业务场景改变导致reload某个section的数据的时候,发生了headerview里的状态重置了(初始化状态),那肯定是header进行了再次的创建,当我debug的时候,果然不出所料。
子类化的header的init方法再次调用。后来我发现是reloadSections的时候会再次触发init方法。而reloadData方法不会触发。这次还真是被坑到了。
我在Stack Overflow上也找到了类似的案例,他们有一个解决方案是[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationLeft] //or UITableViewRowAnimationRight达到刷新效果。

相关文章

网友评论

      本文标题:UITableView复用HeaderView刷新问题

      本文链接:https://www.haomeiwen.com/subject/iefhqqtx.html