Я всегда обновил UITableViewCell
содержание в tableView:cellForRowAtIndexPath:
так:Правильное место для обновления содержания UITableViewCell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:UITableViewCell = self.resultsTableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell!
// update cell content
cell.backgroundColor = UIColor.clearColor()
cell.textLabel?.text = myTextString
return cell
}
documentation также показывает содержание обновляемой в tableView:cellForRowAtIndexPath:
. Однако сегодня I read
Содержимое ячейки необходимо установить прямо перед ее отображением. Нам все равно, какой объект ячейки используется. Все, о чем мы заботимся, это то, что у него есть подходящий материал для отображения, когда он передается визуализатору. Таким образом, правильное место, чтобы установить содержание ячейки является
tableView:willDisplayCell:forRowAtIndexPath:
Причина этого упоминается в the same post. Он говорит о
... проблема, когда пользовательская ячейка «случайно изменяет содержимое» при прокрутке таблицы. Причина, по которой это происходит, заключается в том, что содержимое ячейки установлено в методе
tableView:cellForRowAtIndexPath:
, что не является подходящим местом. В этом методе система ожидает только получить объект ячейки. После отображения ячейки система не будет запрашивать объект ячейки до тех пор, пока она не потеряет ее (т. Е. Когда объект ячейки будет уничтожен) и не сможет найти замену для повторного использования. Если, однако, найдена замена, она будет повторно использована, и вы в конечном итоге увидите содержимое этой повторно используемой ячейки вместо исходной ячейки.
Это правильно? Я никогда не замечал проблемы раньше, но должен ли я обновлять содержимое моей ячейки в tableView:willDisplayCell:forRowAtIndexPath:
? Я был введен в заблуждение в документации?
Я согласился на повторное предложение. Если у вас есть ответ, который, по вашему мнению, будет лучше, чем другой вопрос, оставьте комментарий, и я его снова открою. – Suragch