我正在开发一款iOS应用程序,其中有一个很好的用户界面,用于查看用户的朋友,这些用户目前处于支持分页的垂直ScrollView和100×100pt图片中。然而,有500多个朋友,这是非常低效和缓慢的,一次将所有这些图片加载到内存中。我想要做的是使用TableView并在加载单元格时加载图像,但我真的很喜欢让ScrollView启用分页的捕捉效果。
您如何建议我将此功能添加到TableView?
答案 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)
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 );
}