Array 变化时自动更新 UITableView
Posted
技术标签:
【中文标题】Array 变化时自动更新 UITableView【英文标题】:Automatically update UITableView when Array changes 【发布时间】:2012-05-04 10:55:28 【问题描述】:我有一个包含 UITableView 的视图控制器,它使用 NSMutableArray 通过通常的 UITableViewDelegate 和 UITableViewDataSource 方法确定其内容。
过去我使用 NSFetchedResults 控制器来更新 TableView,因为它的查询结果发生了变化。在这种情况下,我想在将项目添加到数组中/从数组中删除时适当地更新 UITableView。
我应该如何处理?我是否应该使用 addItem/removeItem 方法将 NSMutableArray 包装在模型类中,这些方法使用委托或通知来触发 UITableView 上的 reloadData?还是有更优雅的解决方案?
数组中最多有约 20 个项目,因此性能不是什么大问题。
【问题讨论】:
nsmutableArray 是你想做的事情的好选择 【参考方案1】:警告:非 ARC 示例
您可以设置表格视图用作属性的数组
//.h
.....
NSArray* array_;
@property (nonatomic, retain) NSArray* array;
//.m
合成数组
@synthesize array = array_;
我们对数组更改感兴趣,因此请覆盖 setter 方法
-(void)setArray:(NSArray*)array
if (array_ != array)
[array_ release];
array_ = [array retain];
[self.tableview reloadData];
然后每当你修改你的tableview数据时,array:
在修改数据的最后。
self.array = newArray;
由于它是一个属性,外部类/视图将能够修改数组并且表格将更新。
【讨论】:
【参考方案2】:似乎 NSArrayController 是我想要的,但是它在 ios 中不可用,所以看起来 KVO 是我最好的选择。
【讨论】:
以上是关于Array 变化时自动更新 UITableView的主要内容,如果未能解决你的问题,请参考以下文章
UITableView/UIScrollView 如何自动知道 ContentSize 何时发生变化?
如何使用 diffable UITableView 更新表格单元格