Моя цель - настроить разбивку на страницы с помощью PFQueryTableViewController
. Я был бы доволен одним из этих решений:Пейджинг PFQueryTableViewController автоматически
1, Пейджинг стола автоматически. Как и в случае, если
objectsPerPage = 10
tableView
загружает следующие 10 объектов, когда фактическая строка - это строка 10. и так далее.2, пейджинг с «нагрузка больше ячейки»
UITableViewCell
. Как я вижу, это популярное решение, поэтому мне также понравится этот вариант.
На самом деле у меня нет ошибок при попытке второго решения, это просто не работает. Я добавил новую ячейку на Storyboard и создал для нее класс, и проверил AnyPic и другие связанные коды в качестве отправной точки. Как я вижу, я должен отображать ячейку LoadMoreCell
, когда число строк меньше, чем objects.count
. Я попробовал несколько способов, но ничего не работает, я все равно не могу показать LoadMoreCell
.
Вот моя попытка:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (indexPath.row < self.objects.count) {
NSLog(@"THE NUMBER OF ACTUAL ROW %d", indexPath.row);
NSLog(@"cell tapped");
} else {
// load more
[self loadNextPage];
NSLog(@"LOAD NEXT PAGE");
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *LoadMoreCellIdentifier = @"loadmore";
LoadMoreTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadMoreCellIdentifier];
if (!cell) {
cell = [[LoadMoreTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:LoadMoreCellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.loadMoreLabel.text = @"LOAD MORE CELLS";
NSLog(@"NO CELL");
}
return cell;
}
Другая часть моей реализации является последним кодом частью вопроса.
Мой первоначальный вопрос охватывает мои попытки с первым (пейджинг автоматически).
Мой первоначальный вопрос:
У меня есть рабочий PFQueryTableViewController
, но я не могу настроить нумерация страниц для него. Мой план прост, я хочу загрузить следующую страницу, когда пользователь прокручивается в нижней части таблицы. Если в таблице отображается 10 элементов/страниц, я бы хотел отобразить следующий 10 элементов, когда появилась ячейка 10..
На самом деле я определить, когда пользователь достиг нижней части таблицы, а затем вызвать [self loadNextPage]
для новых элементов, но приложение падает с этой ошибкой:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 10 from section 0 which only contains 10 rows before the update'
Я не очень понимаю, этот вопрос , потому что источник данных (массив) содержит более 40 объектов, которые могут быть загружены.
Вот как мне удается вызов метода (нумерация страниц включена в initWithCoder
)
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
CGPoint offset = aScrollView.contentOffset;
CGRect bounds = aScrollView.bounds;
CGSize size = aScrollView.contentSize;
UIEdgeInsets inset = aScrollView.contentInset;
float y = offset.y + bounds.size.height - inset.bottom;
float h = size.height;
float reload_distance = 10;
if(y > h + reload_distance) {
NSLog(@"load more rows");
[self loadNextPageInTable];
}
}
-(void) loadNextPageInTable {
[self loadNextPage];
NSLog(@"NEW PAGE LOADED");
}
А вот установка табличное
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
self.parseClassName = @"followClass";
self.pullToRefreshEnabled = YES;
self.paginationEnabled = YES;
self.objectsPerPage = 10;
}
return self;
}
- (PFQuery *)queryForTable {
if (![PFUser currentUser]) {
return nil;
}
PFQuery *followQuery = [PFQuery queryWithClassName:@"self.parseClassName"];
[followQuery whereKey:@"followed" equalTo:[PFUser currentUser]];
return query;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.objects.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
static NSString *CellIdentifier = @"followCell";
FeedTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.followLabel.text = object[@"username"];
cell.avatar.file = object[@"image"];
[cell.avatar loadInBackground];
return cell;
}
@Yan Я не уверен, что он выходит из строя на '[само loadNextPage]', потому что у меня есть 'NSLog' в 'queryForTable', который появляется в журнале после' NSLog (@ "load more rows"); '. Поэтому я думаю, что вызов 'queryForTable' вызывается. Нет, нет возможности удалить строки. Он работает, если я прокомментирую это. – rihe
Можете ли вы написать больше кода. Возможно, из queryForTable для дальнейшего отладки и - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) раздел – Yan
@Yan Я отредактировал свой вопрос. – rihe