我有一个非常大的UITableView(~10k条目),我需要一个索引,它应该是可排序的;在较旧的设备(例如iPhone 4s,iPhone 5)上,它有时会在搜索过程中挂起一点点,因为我总是需要重新创建索引。
我不需要本地化,但UILocalizedIndexedCollation
还是要走的路吗?或者是否有标准的iOS来创建高性能指数?
答案 0 :(得分:0)
1,也许你应该先尝试保存索引高度,你可以创建一个框架模型,并保存你的索引框架,每次创建索引时都会使用你之前创建的框架数据,如
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *dict = self.dataList[indexPath.row];
CGRect rect = [dict[@"frame"] CGRectValue];
return rect.frame.height;}
然后您可以使用此模式来创建细胞。
2,你说我需要创建这么多的单元格,我不知道你使用的是什么数据源,但是如果使用网页数据,并且在异步中加载,你可能会在应用程序中打开这么多的队列运行,当你滚动或网络不那么大时,它会很糟糕,所以我建议你应该重新创建数据加载方法,当你快速滚动时,只需加载这个区域周围的单元格,当你慢慢滚动时,你可以异步加载数据源中的图像和文本, 你可以使用uiscrollviewdelegate函数来做这件事
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visiblePaths)
//get cell you can see
{
//get datasource object,when object loading complete,stop loading.
<code>
}
when tableview stop scroll,loading image
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
{
//star loading image,async
<code>
}