iOS TableView 带分页功能?

4

我正在开发一款iOS应用,这款应用有一个漂亮的UI界面,用于查看用户好友,目前使用了垂直的ScrollView,并开启了分页功能以方便展示100x100pt大小的图片。但是,当好友数量超过500时,这种方式效率极低且速度缓慢,因为需要一次性将所有图片加载到内存中。因此,我想使用TableView并在加载单元格时加载图片,但我又非常喜欢拥有分页功能的ScrollView所具有的吸附效果。

你建议如何为TableView添加这个功能呢?


2
@bhavyakothari,请不要使用 code formatting 作为强调。通常情况下,请不要在您的建议编辑中添加强调。此外,没有必要使用 HTML 进行换行。您应该查看格式指南 - Charles
3个回答

6

将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
有人能用 Swift 翻译一下吗? - Pathak Ayush

0

UITableView 继承自 UIScrollView,因此表格视图具有与滚动视图相同的 pagingEnabled 属性。只需像滚动视图一样向表格视图发送 -setPagingEnabled:YES 即可。

例如,在UITableViewController子类实现中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.pagingEnabled = YES;
}

0

我不喜欢启用UITableView的分页时出现的滚动效果,所以我编写了这两个TouchUpInside方法(使用Xamarin的C#语言),并禁用了表视图的分页。我添加了按钮,用户可以点击它们来转到下一页或上一页。向下翻页时,找到的下一个项目将滚动到表视图框架的顶部。向上翻页时,算法会在找到的项目上添加一行,以尝试显示不跨越表视图框架的项目。没有检查非常高的单元格是否大于表视图的边界。

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 );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接