2016-07-28 4 views
0

Я разрабатываю приложение iOS, поэтому я использую UITableViewController. В «cellForRowAtIndexPath» Я использую клетки с идентификаторами повторного использования:Ссылка на ячейку с идентификатором повторного использования

[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyle1 reuseIdentifier:textFieldIdentifier]; 

Проблема состоит в том, что некоторые клетки имеют на зависимые пакеты друг с другом, например, если пользователь вводит текст в одной ячейке, другая ячейка меняет свое значение.

Итак, что является лучшим способом для безопасной ссылки на ячейку, которая должна быть изменена? Проблема в том, что если я сохраню ссылку в «cellForRowAtIndexPath», во время обратного вызова для «textFieldDidChange» ссылка может быть нарушена, например. если ячейка не видна или другая ячейка имеет адрес из-за идентификатора повторного использования ?!

ответ

1

Не пытайтесь сохранять ссылки на кешированные ячейки. Обновите все, что вам нужно, чтобы отобразить в источнике данных таблицы, а затем позвоните по телефону reloadData. Таким образом, таблица заботится о освещении видимых ячеек и работе с кешем ... так что вам не нужно.

+1

позволяет себе немного расширить: вы должны иметь модель для ваших клеток, и все изменения должны быть отражены в этой модели. После того, как вы обновите свою модель, вы затем, при необходимости, перезагрузите соответствующие ячейки или всю таблицу. – Losiowaty

0

Я бы протокол для клеток

Пример

@protocol MyProtocol <NSobject> 
- (void) changeText:(NSString)theText; 
@end 

@interface TableViewCell1 : UITableViewCell 
@property (nonatomic, weak) id<MyProtocol> delegate; 
@end 

@implementation TableViewCell1 
//put this in the method where you get the value of the textfield 
[self.delegate chageText:@"Hello"]; 
@end 

@interface TableViewCell2 : UITableViewCell <MyProtocol> 
@end 

@implementation TableViewCell2 
- (void) chageText:(NSString *)text { 
    self.textLabel.text = text; 
} 
@end