Как сделать динамическое добавление строк, когда пользователь достиг последней строки UITableView? - PullRequest
4 голосов
/ 24 августа 2011

У меня есть UITableview, который показывает 10 строк в настоящее время, который является фиксированным статическим. Теперь я хочу добавить функцию в него. Я хочу добавить еще 10 строк в таблицу, когда пользователь достигнет последней строки UITableView. Я имею в виду, в настоящее время я показываю фиксированные 10 строк в приложении.

Но теперь я хочу добавить еще 10 строк всякий раз, когда пользователь достигает последней строки предыдущего UITableview.

Пожалуйста, дайте мне какие-либо предложения или примеры кода для достижения моих мотивов. Заранее спасибо.

Ответы [ 4 ]

15 голосов
/ 24 августа 2011

Это на самом деле довольно просто. Что вам нужно сделать, это реализовать метод tableView:willDisplayCell:forRowAtIndexPath:, который принадлежит протоколу UITableViewDelegate. Этот метод срабатывает каждый раз, когда ячейка собирается отображаться. Таким образом, он сообщит вам, когда будет отображаться последняя ячейка. Тогда вы могли бы сделать что-то вроде -

– (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{
     if(indexPath.row == [self.array count] - 1) //self.array is the array of items you are displaying
     {
          //If it is the last cell, Add items to your array here & update the table view
     }
}

Другой (немного математический) вариант заключается в реализации UIScrollView методов делегатов (UITableView является подклассом UIScrollView), а именно scrollViewDidEndScrollingAnimation: или scrollViewDidScroll:. Это позволит вам узнать y-позицию контента, который просматривает пользователь. Если обнаружено, что нижняя часть контента видна, вы можете добавить больше элементов.

НТН,

Акшай

12 голосов
/ 24 февраля 2012

uitableview является производным от uiscrollview. Для достижения вашей цели вам необходимо реализовать scrollViewDidEndDecelerating:

 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
    if (endScrolling >= scrollView.contentSize.height) 
    {
      // your code goes here
    }
}

Это обнаружит «эффект отскакивания», такой как смещение вверх видимых рядов, чтобы указать, что вы хотели бы видеть больше.

6 голосов
/ 24 августа 2011

Как бы вы хотели вызвать загрузку дополнительных 10 строк?Когда пользователь просто прокручивает вниз, чтобы увидеть первые 10, которые загружены по умолчанию, он, возможно, не захочет загружать еще 10.

Вы можете добавить строку «добавить еще» в качестве последней строки вашей таблицы.Когда пользователь нажимает на него, вы добавляете еще 10.

(я не знаю, как можно было бы обнаружить «эффект отскакивания», например, сдвигая видимые строки вверх, чтобы указать, что вы хотели бы видеть больше.)

Основная логика будет выглядеть следующим образом:

  1. в cellForRowAtIndexPath вы проверяете, нажал ли пользователь последнюю строку, а затем вызываете ваш код, чтобы добавить 10
  2. чтобы добавить еще 10 строк, вам нужно позвонить [myTable reloadData]
  3. , но перед тем, как позвонить, вам нужно увеличить возвращаемое значение numberOfRowsInSection на 10 и убедиться, что cellForRowAtIndexPath правильно вернет ваш новыйстроки 11-20

пс, если вы ДЕЙСТВИТЕЛЬНО хотите, чтобы 10 дополнительных строк были загружены, когда пользователь достигнет конца таблицы, вам нужно вызвать загрузку еще 10 в cellForRowAtIndexPath или willDisplayCell:forRowAtIndexPath:когда он вызывается для вашей последней строки.

1 голос
/ 24 августа 2011
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [categoriesList count];
}

Здесь CategoriesList - это массив.Мы можем добавить объекты в этот массив и вызвать reloadData в виде таблицы.

...