У меня есть UITableView с pagingEnabled. Каждая ячейка занимает область просмотра таблицы. Это означает, что каждая ячейка имеет ту же высоту и ширину, что и таблица. Я использую пользовательские ячейки, которые имеют свойство name. Я хотел бы отобразить имя текущей (видимой) ячейки в метке. Это прекрасно работает для первой и последней ячеек, но между ними не все так просто. Проблема в том, что cellForRowAtIndexPath вызывается дважды для этих средних ячеек. Вот как выглядит прокрутка от первой до последней ячейки, а затем обратно. Я перечислил индексы по порядку, так как cellForRowAtIndexPath запускается для этой строки:
Row indexPath.row
0 0 //view loads and table appears
1 1,2 //user scrolls to second cell. cellForRowAtIndexPath fires twice. First time indexPath.row is one and second time it is two. This causes cell two's name to display in the label, rather than cell one.
2 2,3
3 3
//user starts scrolling back to first cell
2 1,2
1 1,0
0 0
Я мог бы установить использование объекта NSDate для обнаружения, если я нахожусь в среднем ряду. Разобрав предыдущее время с текущим, я узнаю. Однако, если пользователь очень быстро прокручивает ячейки, это, вероятно, не сработает. Есть ли другой способ сделать это?
Я пытался использовать варианты свойств visiblecells, но это не сработало. UITableView загрузит следующую ячейку, даже если она не видна, в результате чего она станет частью видимых ячеек.