解决方案
由于我对社区的搜索显示了有关该主题的边缘信息,因此我正在分享我的解决方案。我在我的数据控制器上添加了一个回调函数。然后在仔细检查How to tell UICollectionView about your content之后,我意识到我可以简单地切换数据源,如下所示(所以我将两者结合起来):
请注意关于如何让 UICollectionView 自行更新的多个选项。
细节
在我的数据控制器的 .h 文件中
//在@interface之上
typedef void (^CallbackBlock)();
//在@interface内
@property (strong, nonatomic) CallbackBlock onDataUpdated;
//在我的数据控制器方法中数据被更改
[DataManager sharedManager].onDataUpdated(); //singleton, i know...
//替代上面的单例
__weak DataManager* weakSelf = [[DataManager alloc]init];
weakSelf.onDataUpdated();
//在我的 UIViewController (B) 子类中
@property (strong,nonatomic)DataManager* controller;
//在我看来确实加载了 UIVC (B)
self.controller = [DataManager sharedManager];
__weak ProgressViewController* weakSelf = self;
self.controller.onDataUpdated = ^(){
//perform my action
[weakSelf setData:nil]; //remove existing data
[weakSelf setData:[self getSomeData]]; //get some new data
[[weakSelf progressCollectionView]reloadData];
[[weakSelf progressCollectionView] setNeedsDisplay];
};
最终结果:
- UIVC(A)接收按钮点击
- 数据管理器类在步骤 1 的方法执行结束时触发数据更新事件
- UIVC (B) 立即重新加载数据而不刷新 UIVC (A) 的其他子视图