How would I go about sending a reloadData message to the tableView from a custom tableViewCell?
问题:
回答1:
The easiest way to implement that is to use Delegates.
Define a protocol in your CustomTableCell.h like this:
@protocol CustomTableCellDelegate <NSObject>
@required
- (void)reloadMyTable;
@end
The next step is to provide a delegate var:
@interface CustomTableCell : UITableViewCell {
id<CustomTableCellDelegate> delegate;
}
@property (assign) id<CustomTableCellDelegate> delegate;
Make shure you synthesize your delegate-Variable in the CustomTableCell.m.
Now you have a Delegate Defined. There are three remaining steps:
When you create your cell you have to set the delegate for this cell like
cell.delegate = self;
Make shure your TableViewController implements your CustomTableCellDelegate. If you do this you will be forced to implement the - (void)reloadMyTable in your TableViewController:
- (void)reloadMyTable {
[self.tableView reloadData];
}
The last step is to call this method from your CustomTableCell like this:
if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(reloadMyTable)]) {
[delegate reloadMyTable];
}
More about Delegation here.
In short: You define a protocol in your CustomTableViewCell, which is implemented by the TableViewController. If you send a method-message to your delegate, this message will be send to your TableViewController.
回答2:
The best way it's create notification. In your tableView you must create it. It's very easy, something like this:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTableView:)
name:@"reloadTable"
object:nil];
Then you must create method:
- (void)reloadTableView:(NSNotification *)notif {
[self.yourTableName reloadData];
}
and don't forget delete notification:
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable" object:nil];
}
and in your custom tableViewCell when you want reload table you need:
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTable"
object:nil];