iOS基础知识

iOS初学者日记----关于UITableView的几种刷新方式

2018-08-19  本文已影响0人  I牧神的午后I

这两天,本人在学习时,遇到了一个关于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。

上一篇下一篇

猜你喜欢

热点阅读