我正在一個iOS應用程序,用於查看用戶的朋友,這是一個很好的用戶界面,目前在一個垂直的ScrollView啓用分頁和100×100pt圖片。然而,有500多個朋友,這是瘋狂的低效和緩慢,一次加載所有這些圖片在內存中。我想要做的是使用TableView並在加載單元格時加載圖像,但我非常喜歡使用啓用分頁的ScrollView的捕捉效果。帶分頁的iOS TableView?
你會如何建議我將這個功能添加到TableView?
我正在一個iOS應用程序,用於查看用戶的朋友,這是一個很好的用戶界面,目前在一個垂直的ScrollView啓用分頁和100×100pt圖片。然而,有500多個朋友,這是瘋狂的低效和緩慢,一次加載所有這些圖片在內存中。我想要做的是使用TableView並在加載單元格時加載圖像,但我非常喜歡使用啓用分頁的ScrollView的捕捉效果。帶分頁的iOS TableView?
你會如何建議我將這個功能添加到TableView?
設置您的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)。
好的,很酷。謝謝。 – AttilaTheFun
UITableView
繼承自UIScrollView
,所以表視圖與滾動視圖一樣具有pagingEnabled
屬性。只需將-setPagingEnabled:YES
發送到您的表格視圖,就像使用滾動視圖一樣。
例如,在一個UITableViewController
子類實現:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.pagingEnabled = YES;
}
我不喜歡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);
}
@bhavyakothari,請不要使用'code formatting'作爲重點。一般來說,請不要在您的建議修改中增加重點。另外,不需要爲換行符使用HTML。您應該[查看格式指南](http://stackoverflow.com/editing-help)。 – Charles