2013-09-27 2 views
14

を編集状態にある細胞を返します(dequeueReusableCellWithIdentifierから返された)新たに表示セルは次のようになります。dequeueReusableCellWithIdentifierは、次のような問題は、前の項目を削除し、スクロール後、アイテムを削除するためのUITableViewのスライドに編集インターフェイスを使用して7</p> <p>にIOSバージョンでは発生しないIOS 7に

https://dl.dropboxusercontent.com/u/87749409/Screenshot%202013.09.27%2016.08.30.png

[そのイメージは永遠に利用できるので、ここでの説明だしないことがあります。スクロールした後、新しいセルは、最終的な編集された状態にある、とDELETEボタンはまだ表示され、 f-画面左へ]

さらに、返されたセルには、editingフラグが設定されています。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     // Find the item that this cell represents 
     NSDictionary *item = [self itemForRowAtIndexPath:indexPath]; 
     if (!item) return; 

     [tableView beginUpdates]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop]; 
     [tableView endUpdates]; 

     // Remove it from the data store 
     [Inventory removeInventoryItem:item]; 
    } 
} 

私がハッキングされ溶液でこれを克服することができました:

私はセルを削除するために使用しているコードは次のようになります。コード(ハックあり)は、編集状態ではない新しいセルが生成されます(whileループ)。ハック(whileループ)では、新しいセルが生成されます。これはメモリの無駄につながりますが、正しい結果が得られます。

編集状態をリセットするには、prepareForReuseメソッドで必要なことがあるのだろうかと思います。現在、私のprepareForReuseメソッドは、内部のコントロール(ラベルなど)をデフォルト値でのみ初期化します。私は両方のsetEditing:animated:を呼び出して試してみた

は、UITableViewCellのとのUITableView prepareForReuseで、セルを削除し、いつでもdequeueReusableCellWithIdentifier:はまだeditingフラグがセットされていたセルを返したが、何も問題が解決していないようにみえます。

答えて

32

私はこの問題を抱えていましたが、私の答えは「doh」の瞬間でした。独自の実装でのsuper実装を呼び出すようにしてください。

+2

ありがとう、レオ、それでした!私は過去2日間、この問題(他のいくつかと一緒に)を調べていたので、私は実際にスーパーのprepreForReuseと呼ばれた実装のどれも見ていなかったので、私はそれを考えなかった(私は二重チェックした)。苦行として、私はそうする必要があるそれらのSOの質問とブログにメモを投稿します。 – pauln

+0

乾杯!それはドキュメンテーションでははっきりと述べていますが、実際にはそれはまれです。 –

+1

BEFORE: "なぜドキュメントを読んでいるのですか?これが何であるかはわかっています。再利用する前にセルをデフォルト値にリセットできるようにするために呼び出されています。アフター:「お元気ですか、私の額にこのフラットスポットがあります...」 – pauln

関連する問題