重新加载 UITableView 除了它的一部分

Posted

技术标签:

【中文标题】重新加载 UITableView 除了它的一部分【英文标题】:Reload UITableView except one section of it 【发布时间】:2019-01-15 14:16:07 【问题描述】:

我有一个包含多个部分的 tableView。 现在我想重新加载除第一个部分之外的 tableView 的所有部分(因为它是静态的并且不会更改)。

我现在可以通过这种方法重新加载部分:

reloadSections(IndexSet, with: UITableView.RowAnimation)

但它需要部分的数量,并且在我的应用程序中这是动态的并且会随时间变化。 我只能说重新加载第一节之后存在的任何内容。

我想我应该像这样定义一个IndexSet

NSIndexSet *indexSet = [NSIndexPath indexPathWithIndexes:(NSUInteger[])1, ...  length:???];

我不知道该怎么做!

任何想法或建议将不胜感激。

更新

这是numberOfSectionsInTableView 的实现:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    // Inbox Segment
    if (self.selectedIndex == 0) 
        if (self.inboxArray.count > 0) 
            return self.inboxArray.count + 2;
        
    

    // Sent Segment
    else if (self.selectedIndex == 1) 
        if (self.sentArray.count > 0) 
            return self.sentArray.count + 2;
        
    

    // Outbox Segment
    else if (self.selectedIndex == 2) 
        if (self.outboxArray.count > 0) 
            return self.outboxArray.count + 2;
        
    

    // Spam Segment
    else if (self.selectedIndex == 3) 
        if (self.spamArray.count > 0) 
            return self.spamArray.count + 2;
        
    

    // Trash Segment
    else if (self.selectedIndex == 4) 
        if (self.trashArray.count > 0) 
            return self.trashArray.count + 2;
        
    
    return 1;

【问题讨论】:

如果您使用分段的 tableView,您不应该知道您有多少个部分,因为我猜您实现了 numberOfSectionsInTableView: ? 如果我理解你的问题,tableView.reloadData() 应该没问题,如果第一部分是静态的,重新加载就可以了。这会更容易...... @Teetz 我有一些不同大小的动态数组,在不同的情况下,一个数组组成部分的数量。 另外一点,您可以遍历表格视图中的所有部分,但不能遍历第一个部分(我假设您可以识别它,因为您必须在 numberOfSectionsInTableView 方法中提及它)然后重新加载它们. @AhmadF 不行,因为每次我重新加载tableView,第一部分都会闪烁。 【参考方案1】:

假设您知道部分的数量:

NSIndexSet *sectionsIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, self.sections.count - 1)]
[self.tableView reloadSections:sectionsIndexSet withRowAnimation:UITableViewRowAnimationNone];

斯威夫特:

let sectionsIndexSet = IndexSet(1..<sections.count)
tableView.reloadSections(sectionsIndexSet, with: .none)

【讨论】:

现在您更改了答案,它当然可以正常工作。 ;)

以上是关于重新加载 UITableView 除了它的一部分的主要内容,如果未能解决你的问题,请参考以下文章

重新加载 UITableView 而不重新加载标题部分

Swift - 重新加载 UITableView 标题

UITableView 不重新加载部分和内容

UITableView 重新加载部分崩溃

重新加载时阻止透明 UITableView 部分标题闪烁

Jerk当用户位于UITableView的底部时重新加载UITableView