В случае, когда данные должны изменяться внутри ячеек, я не использую метод идентификатора dequeueReusableCellWithIdentifier: (NSString *). Это останавливает UITableView от кэширования ячейки. Когда ячейки табличного представления прокручиваются за пределы экрана, они освобождаются. Есть метод делегата,
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
, который вызывается перед тем, как ваша клетка будет нарисована. Вы можете использовать это, чтобы, да, передать indexPath менеджеру.
Когда ваши данные возвращаются, я обычно вызываю метод
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
, чтобы получить ячейку, затем установить текст в ячейке и вызвать его метод суперкласса UIView,
- (void)setNeedsLayout
.
Это скажет клетке перерисовать.
Другой способ, которым я это сделал, - это использовать пользовательскую ячейку, и этот подкласс пользовательской ячейки вызывает менеджера для своих данных непосредственно при его рисовании. Когда данные возвращаются, он вызывает собственный метод делегата для обновления своих внутренних объектов UILabel, а затем вызывает setNeedsLayout.