4

アプリのナビゲーション バーに [編集] ボタンを追加しました。

UITableViewDataSource と UITableViewDelegate を実装する UIViewController があります。

ストーリーボードを使用して UITableView を追加し、データ ソースとデリゲートに接続しました。

ビューコントローラーの実装ファイルでこれを気に入りました:

self.navigationItem.rightBarButtonItem = self.editButtonItem;
[self.editButtonItem setAction:@selector(setEditing:animated:)];

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    DLog(@"Editing = %d", editing)
    NSLog(editing ? @"Yes" : @"No");

    [self.recentSearchList setEditing:editing animated:YES];
}

問題は、[編集] ボタンをタップするたびに、BOOL 変数の "編集中" が常に "YES" になることです。最初に UITableView を編集モードに設定しますが、編集ボタンには「完了」ではなく「編集」ラベルが表示されます。また、パラメータは常に YES であるため、テーブル ビューが通常モードに設定されることはありません。

私はここで回答から読みました:編集モードの UITableView - '編集' ボタンはステータスを変更しません

編集ボタンは、タップするとその状態自体が変わるはずだと思います。また、オーバーライドされたメソッドのパラメーターもトグルする必要があります。

UIViewController にフラグを設定してモードをチェックし、それに応じて tableView を切り替える独自のコードを書くことができますが、他の方法が必要であると想定しています。

4

2 に答える 2

6

ドキュメントから

ここに画像の説明を入力

ラインも外す[self.editButtonItem setAction:@selector(setEditing:animated:)];

editButtonItemメソッドに暗黙的に関連付けられ- (void)setEditing:(BOOL)editing animated:(BOOL)animatedます。

したがって、ドキュメントにあるように、そのメソッドをオーバーライドして、上部でスーパーの実装を呼び出す必要があります。

于 2012-10-02T10:10:34.550 に答える
0

もっとよく見ると、編集が実際にはコントロール自体への参照であることがわかると思います。

UIControl (この場合は右ボタン) で setAction を呼び出すと、ターゲットは次のシグネチャのいずれかを持つことができます。

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)

このメソッド内で編集モードを個別に処理する必要があります。

于 2012-10-01T16:13:49.187 に答える