カスタムセルで満たされたテーブルビューがあります。すべてのセルには 2 つのボタンがあり、最初のボタンを押すと別のビューに移動します。
私のセカンドビューには、前のテーブルビューのセルの2番目のボタンと同じ機能を持つボタンが1つあります。セカンドビューのボタンを押すと非表示になりますが、セルの2番目のボタンも非表示にしたいです。
でも注意!すべてではなく、最初のボタンを押したこの特定のセルの 2 番目のボタンのみを非表示にしたい!
どうやってやるの?前もって感謝します!
最初のビューをデリゲートとして 2 番目のビューに渡す必要があります。2 番目のビューで変更が行われると、最初のビューhideSecondButton
または作成した任意のメソッドを呼び出します。とにかく、あなたの問題のキーワードはdelegate
です。
これを実装する最も簡単な方法は、通知を使用することです。モデルが変更されたときにデータモデルで通知を発行します。
[[NSNotificationCenter defaultCenter] postNotificationName:@"fooModelChanged" object:self];
fooModelChanged
モデルの通知をリッスンするビューとビュー コントローラーで、これを追加し、リスナー メソッドを実装します。
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fooModelHasChanged:) name:@"fooModelChanged" object:fooModel];
}
- (void)fooModelHasChanged:(NSNotification*)notification {
// Add buttons, remove buttons or simply...
[self.tableView reloadData];
}
この問題は、デリゲートを使用することにより、より良いアプローチで解決できます。しかし、説明と実装には時間がかかります。リスナーの実装を理解するために、Objective-C のコードをさらに読むことをお勧めします。
@Cernal、「object:fooModel」は「fooModel.xcdatamodeld」を参照していますか、それとも何か見逃していますか?