Обновить значение в ячейке таблицы на iPhone

Если у меня есть настройка tableView в приложении iPhone с большим количеством строк, как я могу обновить только одну из этих строк? Я знаю, что они обновляются вручную, когда появляются в поле зрения, но я хочу выпустить обновление, ради аргумента таймер обратного отсчета.

Спасибо


person ingh.am    schedule 26.08.2010    source источник


Ответы (3)


Спасибо за ответы, но я нашел другой способ!

Вызвав это:

NSIndexPath *a = [NSIndexPath indexPathForRow:0 inSection:0]; // I wanted to update this cell specifically
CustomTableViewCell *c = (CustomTableViewCell *)[theTableView cellForRowAtIndexPath:a];

Затем я мог бы напрямую изменить метку, хранящуюся в моей CustomTableViewCell, например так:

[c nowPlayingTrack].text = ...

Надеюсь, это поможет кому-то еще однажды!

Я не уверен, почему, но просто вызов reloadData в tableView вызывал ошибки времени выполнения из-за пользовательской метки. :(

person ingh.am    schedule 27.08.2010

Вы можете просто перезагрузить одну строку, вызвав

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

Для indexPaths вы должны создать массив, который включает indexPath строки, которую вы хотите перезагрузить. Анимация строки просто описывает, должна ли и как перезагружаться строка, с анимацией или без нее:

typedef enum {
   UITableViewRowAnimationFade,
   UITableViewRowAnimationRight,
   UITableViewRowAnimationLeft,
   UITableViewRowAnimationTop,
   UITableViewRowAnimationBottom,
   UITableViewRowAnimationNone,
   UITableViewRowAnimationMiddle
}

Если вы не знаете indexPath, вы можете получить его, позвонив

+ (NSIndexPath *)indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section
person burki    schedule 26.08.2010
comment
reloadRowsAtIndexPaths, хороший материал! очень эффективный. Гораздо лучше, чем вызывать reloadData в табличном представлении! - person ElasticThoughts; 09.06.2012
comment
Обратите внимание на документацию UITableView: если, однако, уведомление пользователя не важно, то есть вы просто хотите изменить значение, отображаемое в ячейке, вы можете получить ячейку для конкретной строки и установить ее новое значение. Это вызвало у меня сильную головную боль... - person Oded Ben Dov; 25.06.2012

Я предполагаю, что вы используете какой-то пользовательский UITableViewCell....

Что я обычно делаю, так это создаю массив своих пользовательских ячеек UITableViewCell и заполняю из них свой UITableView. Таким образом, я могу обновить базовые объекты (в данном случае ваше свойство таймера UITableViewCell) и обновить UITableView.

Возможно, вы сможете получить к нему доступ напрямую (простите за отсутствие фактического синтаксиса iphone... прошло несколько месяцев)

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

[[[myUITableView cells] itemAtIndex:14] setTimerValue:WHATEVER];
person Dutchie432    schedule 26.08.2010
comment
Это неверно, вам не нужно хранить массив ячеек tableview, для этого и предназначен tableview. Используйте reloadRowsAtIndexPath или reloadData и обработайте изменение в cellForRowAtIndexPath. - person Mark; 06.11.2012
comment
Этому ответу более 2 лет. Прошло так много времени с тех пор, как я возился с xCode, но этот вызов функции не звонит в колокол из 3.x - person Dutchie432; 07.11.2012