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 滚动时奇怪的布局行为变化

UITableView/UIScrollView 如何自动知道 ContentSize 何时发生变化?

在 UITableView 中自动观察文件系统的变化

如何使用 diffable UITableView 更新表格单元格

当我动态更改其框架时,即使重新加载后 UITableView 内容大小也不会更新

WooCommerce - 数量变化时自动更新总价