1

いくつかのセクションを持つUITableViewがあり、セクションの数は動的です。つまり、セクションはいつでも増やすことができます。セクションの数が重要ではないテーブルビューでアニメーションを使用してセクションをリロードします。私はこれを単に呼びます:

[notesTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];

ただし、セクション数が変更されたときにこれを機能させるのは非常に面倒です。私はいつもその典型的なアサーションエラーを受け取ります"The number of sections in your tableview before the reload must be the same as after the reload..etc"。私[tableView insertSections...]はこれを取り除くために使用する必要があることを理解していますが、これを行うことは私の状況では難しいかもしれません。

私のセクション数は、配列のサイズに基づいています。[tableView reloadData]行やセクションを手動で挿入することを心配することなく、呼び出すのと同じくらい簡単に、アニメーションでセクションを自動的にリロードする方法はありますか?

(安価な回避策はUIViewアニメーションまたはCAAnimationを使用することですが、reloadSections withAnimationメソッドと同じ効果は得られません。)

4

3 に答える 3

1

これは、で遊んでいるときによくあるエラーですFetchedViewControllers。このエラーが発生する理由は、でオブジェクトを削除しているためですdataSource。tableViewはtableViewを読み込もうとし、delegateMethodsを調べます。これは、指定されているセクションよりも少ないセクションがあることを示しています。

2つのオプションがあります:

  1. FetchedResultsControllerデリゲートメソッドを実装し、メソッドを実装objectWillChange(または)objectDidChangeします。

    [[self tableView] reloadData]; 
    
    // or
    
    [[self tableView] endUpdates];
    

    これで問題は解決するはずです。

  2. NSManagedObjectContextDidSave通知を実装し(異なるmanagedObjectContextsの下でデータを削除する場合)、 (または)の場合に通知を投稿しNSManagedObjectContextDidChangeます。次に、オブザーバーを追加して、変更を通知とマージする必要があります。しかし、私はあなたの問題がこれほど深刻であるとは思えません。オプション(1)で十分だと思います。

于 2012-04-07T16:00:15.563 に答える
0

//NSMutableSetを作成します [self.tableView beginUpdates]; if (isAdd) { [self.tableView insertSections:insertIndexSet withRowAnimation:UITableViewRowAnimationBottom]; } else{ [self.tableView deleteSections:insertIndexSet withRowAnimation:UITableViewRowAnimationTop]; } [self.tableView endUpdates];

于 2017-04-08T09:04:42.563 に答える
-2

これがアニメーションで機能するかどうかはわかりませんが、...

UItableView実装で、numberOfSectionsメソッドを次のように変更します。

- (NSInteger)numberOfSections
{
    return numberOfSections;
}

numberOfSectionsは、必要に応じて変更されるNSIntegerです。

この番号を変更した後、電話をかけてみてください。

[tableView reloadData];

UITableViewはそれに応じて変更する必要があります。

編集:私はこれをアニメーションで使用しますが、あなたの場合にうまくいくかどうかはわかりません。これは、編集スタイル、行の挿入と削除、およびコンテンツの一般的な更新で機能します。

UITableViewの内容を変更する必要がある場合は、次のように入力します。

[tableView beginUpdates];
// Here change your contents
[tableView endUpdates];
于 2012-04-07T15:35:51.000 に答える