在tableView中重新加载数据以获取不可见的部分

时间:2014-06-20 23:01:41

标签: ios objective-c uitableview

然后我得到json更新我重新加载我的tableView,但我在其中有tableView with collectionView,并且在重载时我在可见单元格中有一点滞后。我想重新加载tableView的不可见单元格。但是没有像'visibleCells'这样的'visibleSections'方法。

我得到所有可见的部分

 NSArray *visibleSections = [[self.tableView indexPathsForVisibleRows]valueForKey:@"section"];

不是我想获取所有部分,然后删除所有visibleSections并重新加载这个新数组。但我找不到获得所有部分的方法。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法之一:

- (void)reloadRowsAtIndexPaths:withRowAnimation:
- (void)reloadSections:withRowAnimation:

修改

当您尝试获取所有不可见单元格的indexPath时,您可以尝试这样的方法:

NSMutableArray *invisibleCells = [NSMutableArray array];

for (int i = 0; i < [tabsTableView numberOfSections]; i++) {
    for (int n = 0; n < [tabsTableView numberOfRowsInSection:i]; n++) {
        for (NSIndexPath *indexPath in [tabsTableView indexPathsForVisibleRows]) {
            if ([indexPath section] == i && [indexPath row] == n) {
                goto nextIteration;
            }
        }

        [invisibleCells addObject:[NSIndexPath indexPathForRow:n inSection:i]];

    nextIteration:;
    }
}

更重要的是你为什么要这样做?!由于UITableViewCell被重用,它们将无法更新。当细胞“不可见”时,它会改变其内容并用于可见细胞内的不同位置。这就是UITableView的工作原理。

您(当前也会)使用此方法设置单元格的内容:

- (void)tableView:tableView cellForRowAtIndexPath:indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:_cellID];

    if (!cell) {
        cell = (UITableViewCell *)[[[NSBundle mainBundle] loadNibNamed:@"cellTemplate" owner:nil options:nil] objectAtIndex:0];
    }

    // configure cell content here
}

当单元格被重用时,此方法被调用,并且只有UITableView不重用不可见单元格时才创建单元格。如果是,则更改内容。

所以没有必要重新加载不可见的细胞,这是不可能的。 From the docs

  

返回值

     

表示表格单元格的对象,如果单元格不可见或indexPath超出范围,则为nil。