2013-08-27 66 views
4

我使用的標準表視圖的數據源協議刪除表格單元格:運行其他代碼後表視圖中刪除的行動畫完成

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

我想一旦動畫完成後運行一些其他的代碼,但deleteRowsAtIndexPaths:withRowAnimation方法不具有完成塊。此方法完成後,我還會如何運行一些代碼?

+2

是' - (空)的tableView :(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath'選項?或者你是否試圖從不是代表的地方做這件事,而且很難連接到代表? – Tommy

+0

我其實已經嘗試過,但沒有奏效。 – DJSK

+0

編輯:它確實有效。我的代碼存在一個問題,我正在運行,但現在正在運行。謝謝!!! – DJSK

回答

7

對於iOS 6中蘋果增加- tableView:didEndDisplayingCell:forRowAtIndexPath:UITableViewDelegate。您應該能夠使用它來獲取時,立即各UITableViewCell已經從顯示屏上刪除回調,所以如果你知道你的某個特定索引路徑上開始刪除動畫,那麼你可以使用它作爲認識的通常可靠的手段動畫已結束。 (我想如果用戶在動畫期間將細胞從屏幕上滾動過來,那麼你可能會得到誤報,但是這樣的事情不太可能會增加基本的警惕以防止持久性消極的後果,而不是擔心短暫的,比如如果我最終表示將中期刪除對象滾動返回到屏幕,因爲我已經從我的店裏取出一個空單元格)

2

我相信有一種方法可以實現UITableViewDataSource的方法tableView:commitEditingStyle:forRowAtIndexPath:並在其中執行延遲執行方法。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (UITableViewCellEditingStyleDelete == editingStyle) { 

     [self performSelector:@selector(delayedMethod) withObject:nil afterDelay:0.1]; 
    } 
} 

-(void)delayedMehtod { 
    // Your code here... 
} 

它可能不像「完成」塊一樣漂亮,但我相信它會做到這一點。

希望這會有所幫助!