5

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

4

2 回答 2

10

实现这一点的最简单方法是使用委托。

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

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

下一步是提供一个委托变量:

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

更多关于委托在这里

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

于 2010-08-27T05:12:48.750 回答
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];
于 2014-06-27T09:18:43.950 回答