2010-06-19 32 views
0

我有一個UITableView有時只有幾行。我想要一個特定的行,例如3的第2個出現在表格的頂部。然而,當行不填充整個表的調用下面的數字,沒有任何效果:滾動的UITableView行頂部,即使表只包含幾行

[TableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexOfTopItem inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO] 

有沒有一種方法,我可以強制排在頂部,即使在行有限數量出現桌子?由於

+0

你爲什麼要這麼做?這會刺激用戶,因爲他們會認爲沒有其他任何應用程序的行爲不同。機會永遠不會被批准(如果這對你有影響)。如果你不想顯示第一行,可能完全刪除它? – Eiko 2010-06-19 07:56:09

+0

一般來說,我會同意,但此表顯示日期,我想第一行顯示當前日期。不幸的是,以前的日期可能仍然相關,所以我不能簡單地刪除它們。 – RunLoop 2010-06-19 08:07:28

+0

所有的答案都被低估 - 如果你確實downvote一個答案,你可以請評論,以便作者知道爲什麼他們downvoted。 – jrtc27 2010-06-21 17:17:14

回答

0

實現這一目標的唯一方法是設置表的contentOffset。這將確保所需的行出現在表的頂部,即使行沒有填滿整個表。

-1

重新排列順序,或者有一個按鈕,顯示之前的日期。您可以使用numberOfRowsInSection方法檢查BOOL,然後設置正確的行數。然後在cellForRowAtIndexPath方法中,再次檢查BOOL,並返回有效的單元格。在按鈕上按下,設置BOOL,然後調用tableView的reloadData方法。

+1

由於多種原因,問題並不能總是闡明需要解決特定問題的具體情況。對UI進行評論或爲未提問的問題提供答案很少有幫助。如果我問我的問題,如果這是可以接受的或者我應該考慮哪些替代方案,那麼您的答案將是相關且有用的。如果你不能回答直接問題,請不要回答。效率不高。 – RunLoop 2010-06-21 18:32:20

+0

編輯回答... – jrtc27 2010-06-26 09:51:23

-1

我不知道我知道你想要什麼,但如果你想放置特定的細胞在表的頂部,爲什麼不重新排列的數據,而不是意見?

假設你的細胞(行)數據不硬編碼的,你也許可以這樣做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([indexPath row] == 0){ 
     // Load the data you want to appear at the top 
    }else { 
     // Load the rest of the data 
    } 
} 

您必須手動跟蹤排在前列的數據然而所以這可能不是最好的解決方案。

或者,如果你的數據是一個數組,你可以換你想與數組中的第一個元素頂部的元素,然後調用[myTableView reloadData]重新加載數據。在這種情況下,您不必更改cellForRowAtIndexPath。

當然,這也不是很有效的,因爲你正在操作數組和重裝表,但如果你的表只有幾行,你不必這樣做交換往往是可以接受的。

+0

我的解決方案可以讓你在表格頂部放置一行(按照OP寫的'出現在表格頂部')。我想,真正需要的是在屏幕頂部出現一行的方式嗎?如果這不是投票原因,那麼請解釋。 – nebs 2010-06-21 00:10:23

+0

爲什麼我要重新排列日期,應該固有地排序升序或降序?請參閱我對jrtc27的評論。最好只回答那些你可以直接回答的問題。我的問題沒有要求替代解決方案。閱讀你的答案清楚表明你沒有閱讀原始問題的評論。 – RunLoop 2010-06-21 18:31:55

+2

我讀過評論和問題。我直接回答你的問題(注意你是如何詢問如何在* table *而不是* screen *之上放置一行)。當然,現在你提到你正在存儲日期,我的解決方案沒有什麼意義,但最初沒有辦法知道。所以從技術上講,這不是基於您的問題和意見的措辭的「替代解決方案」。無論哪種方式,其他解決方案可能會幫助其他人,因此不需要對花時間幫助你的人產生消極的態度。 – nebs 2010-06-21 21:24:09