UITableView:创建索引的最佳方式?

时间:2017-05-05 06:52:22

标签: ios uitableview swift3

我有一个非常大的UITableView(~10k条目),我需要一个索引,它应该是可排序的;在较旧的设备(例如iPhone 4s,iPhone 5)上,它有时会在搜索过程中挂起一点点,因为我总是需要重新创建索引。

我不需要本地化,但UILocalizedIndexedCollation还是要走的路吗?或者是否有标准的iOS来创建高性能指数?

1 个答案:

答案 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>
        }