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