отправка данных перезагрузки из пользовательской ячейки таблицы? - PullRequest
5 голосов
/ 27 августа 2010

Как бы я отправил сообщение reloadData в tableView из пользовательского tableViewCell?

Ответы [ 2 ]

10 голосов
/ 27 августа 2010

Самый простой способ реализовать это - использовать делегатов.

Определить протокол в вашем 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.Если вы сделаете это, вы будете вынуждены реализовать - (void) reloadMyTable в вашем TableViewController:

- (void)reloadMyTable {
    [self.tableView reloadData];
}

Последний шаг - вызвать этот метод из вашего CustomTableCell следующим образом:

if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(reloadMyTable)]) {
     [delegate reloadMyTable];
}

Подробнее о делегировании здесь .

Вкратце: вы определяете протокол в вашем CustomTableViewCell, который реализуется TableViewController.Если вы отправите сообщение-метод вашему делегату, это сообщение будет отправлено вашему TableViewController.

2 голосов
/ 27 июня 2014

Лучший способ создать уведомление.В вашем 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];

}

и в вашей пользовательской таблицеViewCell, когда вы хотите перезагрузить таблицу, вам нужно:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTable" 
                                                object:nil];
...