2010-04-14 34 views
0

我不能換我的頭周圍他們試圖在這裏說,在文檔的-beginUpdate什麼:這是一個UITableView -beginUpdates文檔錯誤?

調用此方法,如果您想 後來插入,刪除和 選擇操作(例如, cellForRowAtIndexPath:和 indexPathsForVisibleRows)爲 同時動畫。

讓我們看... cellForRowAtIndexPath:和indexPathsForVisibleRows都是GETTER方法。他們不更新任何東西,也不會改變任何東西。那麼爲什麼我應該在調用這些之前調用-beginUpdates?什麼是關於這些動畫?那麼,沒有,嗯?只是想確保這是真的在文檔中的錯誤,我沒有錯過任何東西。

+0

你知道,在五個小時內對同一主題的五個問題推動了一點。雖然不是真實的重複,但所有這些問題都會互相影響。在解僱其他人之前,您可能需要等待最初的問題的更多答案。您可能不需要後續的問題。 – TechZen 2010-04-14 15:35:56

+0

那麼,研究這樣一個複雜的話題確實涉及數千個問題。 – dontWatchMyProfile 2010-04-17 10:27:53

回答

1

讓我們來看看...的cellForRowAtIndexPath: 和indexPathsForVisibleRows都是 getter方法

他們是從消息交換的對象之一的角度只有getter方法。另一方面,他們參與設定價值。

cellForRowAtIndexPath:是tableview數據源對象中的獲取器,但tableview使用它來爲特定行設置單元格的值。同樣,indexPathsForVisibleRows是tableview對象中的一個getter,但另一個對象將使用它來設置它將訪問的行的值。

對於beginUpdate塊,這兩個消息傳遞的信息可能會變得不穩定,因爲用戶使用UI直接更改表中顯示的行。

那麼爲什麼要在調用這些之前調用-beginUpdates ?

除非用戶直接使用UI操作表的行順序,否則不要這樣做。否則,根本不使用beginUpdates塊。我只用了我的桌子中的大約五分之一。

什麼是關於這些的動畫?

UI向用戶顯示正在移動,插入或刪除的行的動畫。

從你之前的五個問題來看,我認爲你的印象是beginUpdates塊是表的中心關鍵特徵,並且你不能在沒有實現塊的情況下使用表。

這是不是這樣的。您只需要在允許用戶直接編輯行時使用它(不是單元格內容,而是表格中整個單元格的位置本身)。

該塊只是暫時凍結表格的幕後邏輯以便用戶所做的更改可以與現有數據同步。如果沒有該塊,該表將嘗試使用編輯開始之前就位的數據重繪自己。

0

這可能不是一個錯誤。它允許您執行一組操作(包括但不限於cellForRowAtIndexPath:indexPathsForVisibleRows),這些操作可能包括添加,刪除和重新排序行。將這些操作集合在一個beginUpdate/endUpdate塊中將使它們同時動起來。