目前尝试使用此插件实现无限滚动到我的应用中:https://github.com/pronebird/UIScrollView-InfiniteScroll
到目前为止,我已将此代码添加到我的tableview控制器viewDidAppear和viewDidDisappear方法中:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// setup infinite scroll
// keep a weak reference to table view
__weak UITableView *weakTableView = self.tableView;
[self.tableView addInfiniteScrollWithHandler:^{
// keep a strong reference to table view
__strong UITableView *strongTableView = weakTableView;
// seems like our table view didn't make it
if(strongTableView == nil) return;
//
// fetch your data here, can be async operation,
// just make sure to call finishInfiniteScroll in the end
// finish infinite scroll animation
[strongTableView finishInfiniteScroll];
}];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// remove infinite scroll
[self.tableView removeInfiniteScroll];
[[self tableView] reloadData];
}
我拖动表格,微调器显示在最后一行的下方,并在一两秒后消失。现在我需要做的就是从我的数组中获取数据并将其添加到viewDidAppear代码中的块中。
这就是我目前将我的parse.com数据导入名为“people”的NSMuteableArray实例的方式:
- (void)populatePeopleArrayWithCloudData {
// Grab data for datasource and store in people array
NSLog(@"view did load");
people = [[NSMutableArray alloc] init];
PFQuery *query = [PFQuery queryWithClassName:@"People"];
[query whereKey:@"active" equalTo:@1];
[query orderByDescending:@"createdAt"];
[query setLimit:10];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *object in objects) {
Person *person = [[Person alloc] init];
[person setName:[object objectForKey:@"name"]];
[person setNotes:[object objectForKey:@"notes"]];
[person setAge:[[object objectForKey:@"age"] intValue]];
[person setSince:[object objectForKey:@"since"]];
[person setFrom:[object objectForKey:@"from"]];
[person setReferenceNumber:[object objectForKey:@"referenceNumber"]];
PFFile *userImageFile = object[@"image"];
[userImageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
if (!error) {
UIImage *image = [UIImage imageWithData:imageData];
[person setImage:image];
}
}];
[person setActive:[[object objectForKey:@"active"] intValue]];
[person setObjectId:[object objectId]];
[people addObject:person];
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
NSLog(@"Calling reloadData on %@ in viewDidLoad", self.tableView);
[self.tableView reloadData];
}];
}
我将结果限制为10.现在我想做的是继续抓住每次滚动到表格底部时尚未抓取的下10个结果。这段代码可以帮助我做到这一点,需要进入上面提到的区块。
我的tableviewdatasource方法使用“people”实例:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [[self tableView] dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// Configure the cell...
Person *current;
if (tableView == [[self searchDisplayController] searchResultsTableView]) {
current = [searchResults objectAtIndex:indexPath.row];
} else {
current = [people objectAtIndex:[indexPath row]];
}
[[cell textLabel] setText: [current name]];
[[cell imageView] setImage: [current image]];
[[cell detailTextLabel] setText: [current notes]];
return cell;
}
如何在此插件中使用我的数据库结果?正如您所看到的,我将结果限制为10,当我滚动到表格底部并在表格的最后一行之后添加它们时,我需要抓住下一个10。
亲切的问候
UPDATE - 我在截面方法中的行数:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == [[self searchDisplayController] searchResultsTableView]) {
return [searchResults count];
} else {
return [people count];
}
}
答案 0 :(得分:0)
很乐意提供帮助,但您应该先为我们提供反馈。一些想法让你去...
一般的想法是使用PFQuery上的“skip”属性来获得下一个10.每次调用它时,你都会添加10.
因此,请按照您的方式创建查询,将其保存在属性中,但将findObjectsInBackgroundWithBlock调用移动到infiniteScrollHandler,每次调用后添加10以跳过。然后在处理结束时(现在调用表重新加载),调用[strongTableView finishInfiniteScroll]
在您的numberOfRows中,您必须提供源头上可用的最大人数。