UITableView复用HeaderView刷新问题

2018-11-21  本文已影响0人  Michale_Zuo

 最近项目业务需求,在某个页面采用的是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达到刷新效果。

上一篇 下一篇

猜你喜欢

热点阅读