在tableView中为不可见的section重新加载数据



然后我得到json更新我重新加载我的tableView,但我有tableView与collectionView在它里面我有小延迟在可见单元格在重新加载的时刻。我只想重载tableView的不可见单元格。但是没有像visibleCells那样的visibleSections方法。

我得到了所有可见的section

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

不是我想要得到所有的section,然后删除所有的visiblesection和重新加载这个新的数组。但是我找不到找到所有部分的方法。我该怎么做呢?

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

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

编辑

当你试图获取所有不可见单元格的indexPaths时,你可以尝试这样做:

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不重用不可见的单元时才创建单元。

所以不需要重新加载不可见的细胞,这是不可能的。来自文档:

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

最新更新