使用分页

时间:2015-10-06 09:38:09

标签: ios objective-c uiscrollview uicollectionview paging

我已经通过分页阅读了很多关于UICollectionView的SO解决方案。我自己也使用这些解决方案:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat pageWidth = self.collectionView.frame.size.width;
    self.lbPaging.text = [NSString stringWithFormat:@"%d/%d", self.collectionView.contentOffset.x / pageWidth, totalPage];
}

OR

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    CGFloat pageWidth = self.collectionView.frame.size.width;
    self.lbPaging.text = [NSString stringWithFormat:@"%d/%d", self.collectionView.contentOffset.x / pageWidth, totalPage];
}

是的,这项工作大部分时间都很好。但现在我经历了一些意想不到的事情:

当用户滚动得足够快时,它会超过上面的方法,这可能会导致寻呼故障(如最后一页的15/13,或显示3/5,即使它是第一个页)。

  

正是对于我们的开发人员或测试人员来说,要重现此错误,请将手指触摸滚动视图并开始滚动。当您几乎离开边缘时(通常情况下,您将释放手指),触摸边缘的另一侧并继续滚动。在真实设备上重现更容易。

所以我问是否有人知道显示页面导航的正确方法?好吧,没有UIPageViewController(我想显示数字页面,而不是点数)。

修改

我不知道这个问题是否至关重要,但我想也许是这样,因为我在滚动到下一页时正在执行加载数据。最近,我已经崩溃了(它很难调试,就像它崩溃的那一步一样):

    [self.collectionView performBatchUpdates:^{
        NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];
        for (NSInteger index = 0; index < next2page.count; index++ ) {
            [arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:(index + offset) inSection:0]];
        }
        [self.collectionView insertItemsAtIndexPaths:arrayWithIndexPaths];
    } completion:nil];

异常是这样的:无法在第0节中将项插入索引路径(只有69行,插入到indexPath:73)

1 个答案:

答案 0 :(得分:2)

hello i have create button in UICollectionView like load more data and function is given below:-

- (void)viewDidLoad {

  //declare page inedex initial base 0.
  self.pageIndex = 0;

  [self loadMoreData];
}

你调用后加载更多数据功能页面索引会增加这里我希望我的页面索引像0,20,40所以我创建了self.pageIndex + = 20你可以根据你的需要改变

-(void)loadMoreData
{

self.isFromMoreData = TRUE;

self.pageIndex+= 20;

NSLog(@"loadMoreData %d and self.index %d",self.pageIndex,self.index);

[self loadDataIntoCollectionView];//this function calls api 
}

******************另一种方式如下************************ *******

使用UIRefreshControl。

 UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];

    refreshControl = refreshControl;

   refreshControl.backgroundColor = [UIColor whiteColor];
   refreshControl.tintColor = [UIColor grayColor];
   [refreshControl addTarget:self action:@selector(loadMoreData)  forControlEvents:UIControlEventValueChanged];

self.myCollectionView.pagingEnabled = YES;
[self.myCollectionView addSubview:refreshControl];
self.myCollectionView.alwaysBounceVertical = YES;

并调用我在上面声明的相同函数loadMoreData。

希望这能帮到你......

请参考我的图片

enter image description here