2012-12-24 64 views
0

我試圖實現sparrow像顯示動作行的行刷(我的出發點是this代碼)。爲什麼不應該在刪除/插入行的方法上調用reloadData

爲我創造的每一行..我也創建了「backView」的UITableViewCell引用父行..所以,當我點擊刪除就backView例如..它知道要刪除的電子郵件等

而不是使用iOS的內置編輯模式刪除..我只是在backView上創建一個按鈕,並附加一個事件處理程序。父單元格是後視圖的委託......並且後視圖將刪除任務移交給父單元格。

我跟着蘋果的instruction不在我的事件處理程序方法中添加reloadData。但後來事情都搞砸了..我想刪除一行,它不會被刪除或刪除錯誤的順序等..我注意到,如果我只是跳回每個刪除後的父菜單..東西工作完美..所以使用this解決(即暴力強迫reloadData)一切都完美。

我的問題是(對不起長時間介紹)爲什麼我們要求不要在插入/刪除方法中使用reloadData?或者只有當我們使用editing mode way of deleting rows時,本指令才適用?蘋果對此並不十分清楚。

+0

「IInstead使用iOS的內置編輯模式刪除」 - 這是你的問題。 – 2012-12-24 08:10:24

+0

那麼你是說那條指令只適用於我使用iOS內置編輯模式的情況? – abbood

+0

如果你重複你剛剛說的答案..我會很樂意給你正確的答案 – abbood

回答

0

由於- [UITableView reloadData]重新加載所有數據,它基本上無效任何對UI的臨時非永久性更改。您應該在數據結構中反映這些更改,或者我認爲這通常是一個更好的主意,請堅持Apple的默認方法(嘗試僅更改圖形,而不是邏輯)。

0

reloadData完全重建繞過動畫的表。如果您刪除或插入行,請使用beginUpdates。這裏是解釋:

- (void)beginUpdates 開始一系列方法調用,插入,刪除或選擇接收器的行和部分。 如果您希望後續插入,刪除和選擇操作(例如cellForRowAtIndexPath:和indexPathsForVisibleRows)同時進行動畫,請調用此方法。這組方法必須以endUpdates的調用結束。這些方法對可以嵌套。如果您不在該塊內進行插入,刪除和選擇調用,則表格屬性(如行計數)可能會失效。你不應該在組中調用reloadData;如果您在組中調用此方法,則需要自己執行任何動畫。在刪除按鈕IBAction爲

與indexPath.row

  • 標籤的刪除按鈕
  • 然後假設你只有一節

    -(IBAction)deleteBtn:(id)Sender 
    { 
        UIButton *delBtn = (UIButton *)sender; 
    
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:delBtn.tag inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
    
    } 
    

+0

但我對製作任何動畫不感興趣 – abbood

+0

我認爲這是一個建議,而不是限制。我在刪除時沒有遇到使用reloadData的問題。 – Misha

1

試試這個這將只會刪除inde的行xPath並只重新加載該行。

相關問題