2014-01-30 92 views
3

我正在一個iOS應用程序,用於查看用戶的朋友,這是一個很好的用戶界面,目前在一個垂直的ScrollView啓用分頁和100×100pt圖片。然而,有500多個朋友,這是瘋狂的低效和緩慢,一次加載所有這些圖片在內存中。我想要做的是使用TableView並在加載單元格時加載圖像,但我非常喜歡使用啓用分頁的ScrollView的捕捉效果。帶分頁的iOS TableView?

你會如何建議我將這個功能添加到TableView?

+2

@bhavyakothari,請不要使用'code formatting'作爲重點。一般來說,請不要在您的建議修改中增加重點。另外,不需要爲換行符使用HTML。您應該[查看格式指南](http://stackoverflow.com/editing-help)。 – Charles

回答

3

設置您的UITableView爲YES的pagingEnabled屬性始終是一種選擇。不過,默認的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)。

+0

好的,很酷。謝謝。 – AttilaTheFun

1

UITableView繼承自UIScrollView,所以表視圖與滾動視圖一樣具有pagingEnabled屬性。只需將-setPagingEnabled:YES發送到您的表格視圖,就像使用滾動視圖一樣。

例如,在一個UITableViewController子類實現:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.tableView.pagingEnabled = YES; 
} 
0

我不喜歡UITableView的Paging啓用時的滾動,所以我編寫了這兩個TouchUpInside方法(在C#中用於Xamarin),並且在禁用的表視圖上保留了Paging。我添加了按鈕,用戶可以點擊進入下一頁或上一頁。向下翻頁時,找到的下一個項目會滾動到表格視圖框架的頂部。在向上翻頁時,算法會在找到的項目中添加一行,以嘗試顯示不跨越表格視圖框架的項目。對於可能大於表格視圖邊界的非常高的單元格,不會執行檢查。

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