iOS TableView有分页吗?

时间:2014-01-30 04:16:39

标签: ios iphone objective-c uitableview

我正在开发一款iOS应用程序,其中有一个很好的用户界面,用于查看用户的朋友,这些用户目前处于支持分页的垂直ScrollView和100×100pt图片中。然而,有500多个朋友,这是非常低效和缓慢的,一次将所有这些图片加载到内存中。我想要做的是使用TableView并在加载单元格时加载图像,但我真的很喜欢让ScrollView启用分页的捕捉效果。

您如何建议我将此功能添加到TableView?

3 个答案:

答案 0 :(得分:4)

将UITableView的pagingEnabled属性设置为YES始终是一个选项...但是,默认的UIScrollView分页将自动以UITableView的帧高度的倍数页面(不太可能与UITableViewCells的高度相同),所以你会可能需要实现scrollViewWillEndDragging:withVelocity:targetContentOffset.当UIScrollView(或UITableView)开始减速时调用此方法,它允许我们指定UIScrollView应该完成移动的位置。

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                    withVelocity:(CGPoint)velocity 
             targetContentOffset:(inout CGPoint*)targetContentOffset
{
    //Intercept and recalculate the desired content offset
    CGPoint targetOffset = [self recalculateUsingTargetContentOffset:targetContentOffset];

    //Reset the targetContentOffset with your recalculated value
    targetContentOffset->y = targetOffset.y;
}

您可能需要查看此帖子(UITableView w/ paging & momentum),以便了解您需要如何定制目标内容偏移重新计算方法以满足您的需求。

答案 1 :(得分:0)

UITableView继承自UIScrollView,因此表视图具有pagingEnabled属性,就像滚动视图一样。只需将-setPagingEnabled:YES发送到您的表格视图,就像滚动视图一样。

例如,在UITableViewController子类实现中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.pagingEnabled = YES;
}

答案 2 :(得分:0)

当我启用UITableView的分页时,我不喜欢滚动,因此我编写了这两个TouchUpInside方法(在C#中用于Xamarin)并且禁用了Paging on table view。我添加了用户可以点击以进入下一页或上一页的按钮。向下翻页时,找到的下一个项目将滚动到表格视图框架的顶部。在进行分页时,算法会在找到的项目中添加一行,以尝试显示不跨越表格视图框架的项目。对于可能比表格视图边界大的非常高的单元格,不进行检查。

partial void buttonNextPageClick( NSObject sender )
{
  NSIndexPath path;
  CGPoint scrollpoint;

  scrollpoint = new CGPoint( 5f, tableviewFOO.ContentOffset.Y + tableviewFOO.Bounds.Height );  // down a page

  path = tableviewFOO.IndexPathForRowAtPoint( scrollpoint );
  if ( path == null )
    path = NSIndexPath.FromRowSection( tableviewFOO.NumberOfRowsInSection( 0 ) - 1, 0 );

  if ( path != null )
    tableviewFOO.ScrollToRow( path, UITableViewScrollPosition.Top, true );
}

partial void buttonPreviousPageClick( NSObject sender )
{
  NSIndexPath path;
  CGPoint scrollpoint;

  scrollpoint = new CGPoint( 5f, tableviewFOO.ContentOffset.Y - tableviewFOO.Bounds.Height );  // up a page

  path = tableviewFOO.IndexPathForRowAtPoint( scrollpoint );
  if ( path == null )
    path = NSIndexPath.FromRowSection( 0, 0 );
  else
    path = NSIndexPath.FromRowSection( path.Row + 1, 0 );  // +1 for the cell that might be completely visible

  if ( path != null )
    tableviewFOO.ScrollToRow( path, UITableViewScrollPosition.Top, true );
}