2017-06-22 18 views
0
  1. 描述:在將新行插入到tableView中時,是否必須調用begin/endUpdates方法?

    ,當應用程序被啓動,創建與3行的表圖。如果點擊,導航欄中的添加按鈕將在表格視圖中添加新行。添加行操作背後的核心流程是方法func insertRows(at:, with:)

    Apple documents和許多堆棧上溢的答案(例如,this one)表明,把任何方法調用插入,刪除,或選擇行和功能beginUpdates()endUpates()之間的表視圖的部分。

    我刪除了beginUpdates()endUpdates();事實證明,沒有他們的應用程序工作得很好。

  2. 問:

    什麼是添加beginUpdates() & endUpdates()的好處是什麼?

  3. 爲什麼我問這個問題:

    功能func insertRows(at:, with:)被調用委託函數tableView(_:, cellForRowAt:) -> UITableViewCell通過dequeueReusableCell(withIdentifier:, for:) -> UITableViewCell創建一個新的細胞,這是同樣的程序在tableView創建3個默認行,當應用程序啓動,但是,在那裏沒有這樣的一個beginUpdates/endUpdates。那麼,爲什麼我需要在以後添加新行時添加此過程,而如果沒有它們,應用程序似乎還在工作?

+0

**我刪除了beginUpdates()和endUpdates()原來的應用程序工作得很好,沒有他們** - >不重裝數據怎麼能工作正常,你要麼使用beginUpdates()&endUpdates或重新加載數據來更新/動畫你的tableview –

+2

[相關](https://stackoverflow.com/q/23260279/335858) – dasblinkenlight

+0

@AmritTiwari你能停止COPY和粘貼從其他人的答案,如這一個:https://stackoverflow.com/a/23260386/3004698 – SLN

回答

2

動畫分批插入,缺失,和行和段的重新加載,調用由連續調用beginUpdatesendUpdates定義動畫塊中的相應方法。如果您不在此塊中調用插入,刪除和重新加載方法,則行和部分索引可能無效。調用beginUpdatesendUpdates可以嵌套;所有索引都被視爲只有外部更新塊。

在塊結束時 - 也就是endUpdates返回後 - 表視圖查詢其數據源並像平常一樣查詢行和段數據。因此,應該更新支持表視圖的集合對象以反映新的或刪除的行或部分。

Apple Docs

相關問題