Как сделать табличное представление, которое можно прокрутить навсегда? - PullRequest
0 голосов
/ 29 апреля 2010

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

Мои мысли:

  • не отображают индикаторы прокрутки (они вряд ли будут иметь смысл)
  • какое значение вернутьметод делегата numberOfRows?Эта постоянная бесконечности?
  • в cellForRowAtIndexPath: просто обернуть индекс, когда он превышает границы?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

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

Допустим, у вас сначала есть 100 элементов данных. Ваш numberOfRows возвращает 101 тогда. Первые 100 клеток нормальные. И показатели прокрутки по-прежнему имеют смысл.

Если отображается 101-я ячейка, вы отображаете индикатор прогресса, такой как UIActivityIndicator, в ячейке и запускаете процесс для загрузки следующих 100 строк. Когда данные поступают, вы либо перезагружаете всю таблицу с помощью UITableView reloadData , либо вставляете новые ячейки индивидуально с помощью UITableView insertRowsAtIndexPaths: withRowAnimation: .

Итак, вы просто продолжаете бесконечно добавлять к столу. Это проще, чем пытаться сохранить таблицу как «окно», которое всегда находится в N ячейках / строках, и выгружать из начала таблицы. Если вам нужно окно такого типа, вы можете пересмотреть вопрос, действительно ли это лучший способ взаимодействия с вашими данными.

3 голосов
/ 29 апреля 2010

Я только что закончил реализацию этого варианта.

Предположим, у вас есть 100 строк и 8 из них помещаются на экране. Сначала добавьте последние 8 строк, затем обычно 100 строк и затем первые 8 строк в конце. Перецентрируйте табличное представление, используя setContentOffset к первой строке 100.

Когда пользователь прокручивает ниже сотого, он увидит строки 1-8, вы можете обнаружить это в делегатской функции viewDidScroll и перенести прокрутку назад к первой записи (убедитесь, что вы установили анимированный флаг на NO, когда вы это делаете ). Точно так же, когда пользователь прокручивает последние 1, он / она увидит последние 8 записей, вы можете снова перецентрировать представление прокрутки, чтобы отобразить последние 8 записей в секции из 100 строк.

Это фактически реализует круговую прокрутку, и пользователь может продолжать прокручивать в обоих направлениях.

2 голосов
/ 29 апреля 2010

Я не пробовал это, но вот идея. Допустим, N = 100, так как у вас есть 100 строк. Что мы сделаем, так это скажем, что у таблицы 200 строк, но мы будем прокручивать пользователя в диапазоне 50-150.

Скажите (представление таблицы), что вы удвоили это количество строк, поэтому для numberOfRows верните 2 * N. В cellForRowAtIndexPath всегда возвращайте ячейку, соответствующую (строке% N).

Теперь инициализируйте таблицу, прокручиваемую до строки N (вместо 0), чтобы пользователь мог прокручивать в любом направлении.

Когда пользователь прокручивает таблицу, в конечном итоге он запрашивает строку N + (N / 2), когда это происходит, отправьте scrollToRowAtIndexPath: atScrollPositionanimated: для прокрутки к строке N Это переместит таблицу обратно на N (то есть: от 150 до 50), той же ячейке, но мы никогда не выйдем за пределы таблицы таким образом.

Сделайте то же самое, когда табличное представление запрашивает ячейку в строке N- (N / 2) для прокрутки вверх.

Вам придется иметь дело с особым случаем, когда N ячеек вписывается в вид с дополнительной комнатой, то есть: что, если N было 1?

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