2015-06-23 3 views
1

У меня есть страница, которая поддерживает разбиение на страницы при загрузке данных из сети.Предварительная загрузка данных из сети в UITableView

Я использую UITableview для отображения списка.

Я хочу предварительно загрузить следующую страницу, когда пользователь прокрутит страницу до конца текущей страницы.

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

Какой метод делегата UITableView является лучшим выбором для этой задачи?

ответ

2

Попробуйте следующий метод, он будет узнать отображение ячейки

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell 
    forRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
//  Webservice Call for next 10 display data 
    } 

Обсуждения Представление таблицы посылает это сообщение делегата только прежде чем он использует ячейку для рисования строки, тем самым позволяя делегату настроить объект ячейки до его отображения. Этот метод дает делегату возможность переопределить свойства состояния, установленные ранее табличным представлением.

+0

Этот метод полезен. Благодаря! –

0

UITableView является подклассом UIScrollView, поэтому вы можете использовать его методы делегирования. Я предлагаю вам использовать это два:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 

    if (!decelerate) { 
     NSSet *visibleRows = [NSSet setWithArray:[self.view.tableView indexPathsForVisibleRows]]; 

    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 

    NSSet *visibleRows = [NSSet setWithArray:[self.view.tableView indexPathsForVisibleRows]]; 

} 

Проверьте положение после того, как вы получите visibleRows и поджать свои данные, если, например, в NSSet последняя indexPath.row равно может подсчитать количество DataSource массива (или равно [число массива ] - some_number_you_want)

Для архивирования, когда Tableview начать прокрутку, вы можете реализовать преднагрузки здесь логику:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 

    NSSet *visibleRows = [NSSet setWithArray:[self.view.tableView indexPathsForVisibleRows]]; 
// your update code here 
} 

Надеется, что это помогает.

+0

Я сделал некоторый эксперимент и выяснил, что использование этих методов перетаскивания было недостаточно хорошим в моей ситуации. Затем перетаскивание делегирования происходит слишком рано и не может получить окончательное местоположение. –

0

добавить этот метод в UITableViewDelegate:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGFloat height = scrollView.frame.size.height; 

    CGFloat yOffset = scrollView.contentOffset.y; 

    CGFloat distanceFromBottom = scrollView.contentSize.height - yOffset; 

    if(distanceFromBottom < height) 
    { 
     NSLog(@"end of the table and call web service or load more data"); 
    } 
} 
+0

Я пробовал, но этот метод называется многократным с одним жестом прокрутки –

Смежные вопросы