解決
コミュニティを検索した結果、このトピックに関するわずかな情報しか得られなかったので、解決策を共有します。データ コントローラーにコールバック関数を追加しました。次に、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) ボタンのクリックを受け取る
- Data Manager クラスは、ステップ 1 のメソッド実行の最後にデータ更新イベントを発生させます
- UIVC (B) は、UIVC (A) の他のサブビューを更新せずにデータを即座に再読み込みします。