从自定义tableview单元格发送重新加载数据?

时间:2010-08-27 04:07:55

标签: iphone uitableview reloaddata

我如何从自定义tableViewCell向tableView发送reloadData消息?

2 个答案:

答案 0 :(得分:10)

实现它的最简单方法是使用Delegates。

在CustomTableCell.h中定义一个协议,如下所示:

@protocol CustomTableCellDelegate <NSObject>
@required
- (void)reloadMyTable;
@end

下一步是提供委托var:

@interface CustomTableCell : UITableViewCell {
    id<CustomTableCellDelegate> delegate;
}

@property (assign) id<CustomTableCellDelegate> delegate;

确保你在CustomTableCell.m中合成你的委托变量。

现在您有一个委派定义。剩下的三个步骤是:

创建单元格时,必须设置此单元格的委托,如

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];
}

有关代表团here的更多信息。

简而言之:您在CustomTableViewCell中定义了一个协议,该协议由TableViewController实现。如果您向委托发送方法消息,则此消息将发送到您的TableViewController。

答案 1 :(得分:2)

创建通知的最佳方式。在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];