0

NSMutableArray *objectsテーブルビューセルのコンテンツを表示するために使用するいくつかのオブジェクトを保持します。が 0 の場合、次の場合objects.countにテーブル ビューの編集モードを有効にしたいと思いますviewDidLoad

- (void)viewDidLoad {

    // If there is no content to present enable editing mode
    if (self.objects.count == 0) [self setEditing:YES animated:YES];
}

これはself.editButtonItem、新しい行を切り替えて、テーブル ビューに挿入します (「ここをタップして新しい要素を追加します」と表示されます)。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:animated];

    if (self.editing) {
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[self.objects count] inSection:0]] 
                              withRowAnimation:UITableViewRowAnimationAutomatic];
    }

    else {
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[self.objects count] inSection:0]] 
                              withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

残念ながら、このセットアップではクラッシュが発生します。

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-1914.85/UITableView.m:833

プログラムで編集モードを切り替えることはできませんか? ユーザーが触れると、self.editButtonItemすべて正常に動作します。私の知る限り、この editButton は で行っているのと同じことを行いviewDidLoadます。

私は何を間違っていますか?

4

1 に答える 1

1

ここには2つの異なる質問があると思います。

1つは、プログラムで実行できsetEditing:animated:ます。

しかし、それがあなたがここで本当にやりたいことだとは思いません。編集モードは、ユーザーがテーブルを手動で編集するためのもので、左側に小さな赤いボタンが表示され、これらの設定が設定されている場合は右側に小さな移動インジケーターが表示される可能性があります。

より良いのは、オブジェクトが変更されたことに気付いたときに を実行し、実装されたプロトコル メソッドが正しいこと[self.tableView reloadData];を行うことを確認することです。これには、 (およびおそらく も) およびUITableViewDataSourceの実装が含まれます。これにより、項目が変更として tableView に表示されます。tableView:numberOfRowsInSection:numberOfSectionstableView:cellForRowAtIndexPath:objects

于 2012-07-21T18:09:16.683 に答える