重新加载 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 除了它的一部分的主要内容,如果未能解决你的问题,请参考以下文章