2010-04-29 73 views
0

我有一組100行,非常類似於可以在選取器中選擇的值。當用戶滾動桌子時,我希望將行添加爲永久性組裝帶。因此,當用戶滾動到達第100行並進一步滾動時,表格視圖將再次顯示第1行,依此類推。反方向同樣的事情。如何製作可永久滾動的表格視圖?

我的想法:

  • 不顯示滾動指標(他們會沒有太大意義,可能)
  • 在numberOfRows委託方法返回什麼價值?這無限常數?
  • in cellForRowAtIndexPath:當它超過邊界時,簡單地包裝索引?

回答

2

我還沒有試過這個,但是這裏有一個想法。我們假設N = 100,因爲你有100行。我們要做的是告訴tableview我們有200行,但我們會讓用戶滾動範圍在50-150之間。

告訴(tableview)你有兩倍的行數,所以對於numberOfRows,返回2 * N。在cellForRowAtIndexPath中,始終返回對應於(行%N)的單元格。

現在初始化表格滾動到第N行(而不是0),以便用戶可以向任一方向滾動。

當用戶向上滾動tableview時,最終會要求第N +(N/2)行,當發生這種情況時,發送scrollToRowAtIndexPath:atScrollPositionanimated:滾動到第N行。這將把表格重新定位回N(即:從150到50),但是我們永遠不會以這種方式跑出桌子的盡頭。

當tableview要求第N-(N/2)行的單元格滾動時,請做同樣的事情。

你必須處理N個單元適合視圖的特殊情況,需要額外的空間,例如:如果N是1,該怎麼辦?

3

很多應用都這樣做。這個想法是,表格的開頭總是一樣的,但是你一直在加入,所以表格只是在不斷增長。

假設您首先有100個數據元素。您的numberOfRows返回101。前100個細胞是正常的。滾動指標仍然有意義。

如果顯示第101個單元格,則在單元格中顯示像UIActivityIndi​​cator這樣的進度指示器,並啓動該進程以加載下100行。當數據到達時,您可以使用UITableView reloadData重新加載整個表格,或者使用UITableView insertRowsAtIndexPaths:withRowAnimation:單獨插入新的單元格。

所以,你只是無限地追加到表中。這比試圖將表保持爲總是處於N個單元/行的「窗口」並從表的開始處卸載更容易。如果你需要這種窗口,你可能會重新考慮這是否是真正與數據交互的最佳方式。

3

我剛完成實現這個變化。

讓我們假設你有100行,其中8個適合屏幕。首先添加最後8行,然後通常添加100行,最後添加前8行。通過使用setContentOffset到100的第一行來接收tableview。

當用戶滾動到第100個以下時,他會看到第1-8行,您可以在viewDidScroll委託函數中檢測到此情況,並將滾動重新移回第一個記錄(確保您在執行操作時將動畫標誌設置爲NO這個)。同樣,當用戶滾動過去1時,他/她會看到最後8條記錄,您可以重新調入滾動視圖以顯示100行部分中的最後8條記錄。

這實際上實現了循環滾動,用戶可以保持雙向滾動。