2013-06-21 3 views
9

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

TableView будет находиться в UIViewController среди двух других UITableViews; один из них - статический, а другой - динамический (по умолчанию). это также ставит вопрос о том, что делать с некоторыми из моих методов Datasource. А именно tableView:NumberOfRowsInSection, так как количество точек данных я буду алгоритмический сгенерированы и, следовательно, возможно бесконечное (например: не существует определенное количество к данным, пока он не показывает все это)

+0

Вот демо бесконечного представления таблицы в Swift: https://github.com/i-schuetz/tableview_infinite – Ixx

ответ

1

Из предыдущего поста: UITableView infinite scrolling

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

Если вы используете его для дат, почему бы вам просто не использовать вид выбора?

+0

Я пробовал искать путь конца, но он работает только, если вы идете в одну сторону, и как я могу указать количество строк, если пользователь прокручивает назад? Кроме того, я делаю какой-то пользовательский чертеж для каждой даты, поэтому мне нужна ячейка для каждой даты, но на каждой из них будут разные вещи. в зависимости от данных, конечно. – Conflagrationator

2

UITableView - это подкласс UIScrollView. Внесите - (void)scrollViewDidScroll:(UIScrollView *)scrollView (часть протокола UIScrollViewDelegate) и используйте свойство contentOffset. Например, если contentOffset.y близок к нулю, вы знаете, что находитесь рядом с верхней частью таблицы, и вы можете вставлять ячейки выше текущей позиции.

6

Вы должны вернуть INT_MAX в tableView:NumberOfRowsInSection, а затем обмануть немного в tableView:cellForRowAtIndexPath:

Допустим, вы хотите, дни недели бесконечно. Таким образом, у вас будет массив из @ [@ "Понедельник", @ "Вторник", @ "Среда", @ "Четверг", @ "Пятница", @ "Суббота", @ "Воскресенье"]. Тогда значение для текущей строки равно indexPath.row % array.count. Этот способ позволяет отобразить небольшое количество данных в почти бесконечное количество строк.

Чтобы сделать бесконечную иллюзию работы, вы должны выбрать строку рядом с INT_MAX/2.

Update:

TableView может вызвать исключение при возврате слишком большое количество строк. В этом случае укажите количество строк самостоятельно. 100.000 строк работают нормально.

+0

Почему Даунвит? – Lukas

+0

Поскольку INT_MAX заморозит приложение. –

+1

Возможно, из-за проблемы в вашей реализации. Код был протестирован и работает (за исключением ошибки утверждения. См. Обновление описания) – Lukas