这两天,本人在学习时,遇到了一个关于UITableView控件的问题。
问题产生于我们在UITableView里面加载网页,当网页加载完成时,我们需要获取这个网页的高度,然后reloadData这个UITableView,可是这时UITableView就会再次加载网页,导致网页加载的无限循环而无法显示。
于是本人在网上查找解决方法,终于找到beginUpdates和endUpdates这两种方法。
- (void)webViewDidFinishLoad:(UIWebView *)webView //网页加载完成的时候调用
{
CGRect frame = webView.frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
c = webView.frame.size.height;
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
beginUpdates和endUpdates这两种方法必须一起使用,它们的特点在于不会去调用cellForRow,只会去调用heightForRow,这样网页就不会被重新加载了。
为了更全面的了解UITableView的刷新,我又去总结了几种UITableView的刷新方式。
第一种
[self.tableview reloadData];
这是最常用的一种刷新UITableView的方法。
第二种
NSIndexSet *Sec = [[NSIndexSet alloc] initWithIndex:1];
[self.tableView reloadSections:Sec withRowAnimation:UITableViewRowAnimationAutomatic];
这是刷新局部Section的方法。
第三种
NSIndexPath *cell1=[NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:cell1,nil] withRowAnimation:UITableViewRowAnimationMiddle];
这是刷新局部cell的方法。
第四种
[self.tableView beginUpdates];
[self.tableView endUpdates];
仅触发heightForRow,而不触发cellForRow。