Установка текста UITableViewCell, когда ячейка не выбрана - PullRequest
0 голосов
/ 03 сентября 2011

У меня есть UITableViewCell, который создается (в методе «cellForRowAtIndexPath») с помощью

[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];

Когда нажата «Кнопка доступа», у меня появляется извещатель UIDatePicker, который должен установитьтекст ячейки к выбранной дате.Появляется средство выбора, и моя ячейка не равна нулю, однако я не могу видеть фактический текст (дату) ячейки, пока не щелкну по ней (ячейка, а не «кнопка доступа»).

Вот код, который устанавливает текст:

targetCell.textLabel.text = [formatter stringFromDate:_datePicker.date];

targetCell - переменная экземпляра, устанавливаемая при вызове метода: «accessoryButtonTappedForRowWithIndexPath».

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

1 Ответ

1 голос
/ 03 сентября 2011

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

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

  1. Измените источник данных, а не ячейку, когдазначение выбирается из средства выбора даты
  2. Перезагрузите представление для ячейки, либо перезагрузив
    • представление всей таблицы, используя -[UITableView reloadData], либо
    • только эту строку, используя -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

Использование любого из этих методов приведет к вызову источника данных табличного представления -tableView:cellForRowAtIndexPath:, который обновит строку с новой ячейкой.Поэтому для этой строки будет отображаться правильная дата, даже если она прокручивается вне поля зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...