4

テーブルを通常のUIViewControllerに挿入し、デリゲートコンポーネントとソースコンポーネントをファイルの所有者に接続しました。テーブルの行にデータを挿入すると、すべて正常に機能します。しかし今、私は行を削除する方法を見つけようとしています。

他の多くの投稿を見ただけですが、適切な解決策を見つけることができませんでした。

テーブルの各行にasseccoryボタンを挿入しようとしました。

cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

アクセサリボタンが押されたときに呼び出されるメソッドも見つかりました。

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"Accessory pressed");

    //[self tableView:tableView willBeginEditingRowAtIndexPath:indexPath];

    //[self tableView:nil canEditRowAtIndexPath:indexPath];
    //[self setEditing:YES animated:YES];
}

ログ内にメッセージが出力されますが、私が呼び出そうとしたメソッド(コメントされたメソッド)のいずれも、ビューを編集モードに変更しませんでした。どうすればこの問題を解決できますか?


これがUIViewControllerのスクリーンショットです。私はnavigationControllerを統合していません。

ここに画像の説明を入力してください

4

2 に答える 2

10

テーブルビューの編集モードを有効にするには、次のように編集メソッドを呼び出すことができますUITableView

[self.tableView setEditing:YES animated:YES];

tableView:commitEditingStyle:forRowAtIndexPath:行の削除を有効にするメソッドを実装する必要があります。行を削除するには、メソッドを使用する必要がありますdeleteRowsAtIndexPaths:withRowAnimation:

例:-

self.navigationItem.rightBarButtonItem = self.editButtonItem;//set in viewDidLoad

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { //Implement this method
    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:animated];
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { //implement the delegate method

  if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Update data source array here, something like [array removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  }   
}

詳細については、こちらのアップルのドキュメントを確認してください。

于 2013-01-03T22:43:47.257 に答える
1

行を削除する問題を解決できました。それを機能させるために、ACBが私に言ったように、次の方法を挿入しました。

//when blue accessory button has been pressed
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

    //turn into edit mode
    [tableView setEditing:YES animated:YES];    
}

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

    [super setEditing:editing animated:animated];    
}

// method to enable the deleting of rows
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        Activity *activity = [allActivities objectAtIndex:indexPath.row];

        // remove the item from the array
        [allActivities removeObjectAtIndex:indexPath.row];

        //delete element from database with created method
        [dataController deleteFromTable:@"activity" theElementWithID:activity._id];

        [tableView setEditing:NO animated:YES];

        // refresh the table view
        [tableView reloadData];
    }

}

私はcocoapi.wordpress.com/tag/caneditrowatindexpathでこの解決策を見つけました

しかし、私にはまだ1つの問題があります。誰かが編集モードに入り、行を削除しない場合、編集モードを再びオフにする可能性はありません。ビューを切り替えて再び戻ると、自動的に停止しますが、NavigationControllerが挿入されていないため、それ以外の場合は不可能です。

編集中に行の左側にある削除コントロールの状態にアクセスする方法はありますか?誰かが編集モードからジャンプするために削除を再びオフにしたかどうかを検出することは有用でしょう。

アップルのユーザーガイドには合わないかもしれませんが、私の最初のプロジェクトだけでうまくいくはずです。

于 2013-01-05T12:19:57.917 に答える