カスタムtableViewCellからtableViewにreloadDataメッセージを送信するにはどうすればよいですか?
2 に答える
これを実装する最も簡単な方法は、デリゲートを使用することです。
CustomTableCell.hで次のようにプロトコルを定義します。
@protocol CustomTableCellDelegate <NSObject>
@required
- (void)reloadMyTable;
@end
次のステップは、デリゲート変数を提供することです。
@interface CustomTableCell : UITableViewCell {
id<CustomTableCellDelegate> delegate;
}
@property (assign) id<CustomTableCellDelegate> delegate;
デリゲートを合成することを忘れないでください-CustomTableCell.mの変数。
これで、デリゲートが定義されました。残りの3つのステップがあります。
セルを作成するときは、このセルのデリゲートを次のように設定する必要があります。
cell.delegate = self;
TableViewControllerがCustomTableCellDelegateを実装していることを確認してください。これを行うと、TableViewControllerに-(void)reloadMyTableを実装する必要があります。
- (void)reloadMyTable {
[self.tableView reloadData];
}
最後のステップは、次のようにCustomTableCellからこのメソッドを呼び出すことです。
if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(reloadMyTable)]) {
[delegate reloadMyTable];
}
委任について詳しくは、こちらをご覧ください。
つまり、TableViewControllerによって実装されるCustomTableViewCellでプロトコルを定義します。メソッドメッセージをデリゲートに送信すると、このメッセージはTableViewControllerに送信されます。
通知を作成する最良の方法。tableViewで作成する必要があります。とても簡単です。次のようなものです。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTableView:)
name:@"reloadTable"
object:nil];
次に、メソッドを作成する必要があります。
- (void)reloadTableView:(NSNotification *)notif {
[self.yourTableName reloadData];
}
削除通知を忘れないでください:
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable" object:nil];
}
また、カスタムtableViewCellで、必要なテーブルをリロードする場合は、次のようにします。
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTable"
object:nil];