web-dev-qa-db-ja.com

iPhone、テーブルビューで編集/完了ボタンクリック用のフック

私のテーブルビューコントローラーには

self.navigationItem.leftBarButtonItem = self.editButtonItem;

これにより、左上隅に通常の編集/完了ボタンが表示されます。したがって、ユーザーが[編集]をクリックすると、ボタンのキャプションが[完了]に変わり、テーブルエントリが削除または並べ替えられる場合があります。ユーザーが実際に「完了」をクリックしたら通知を受け取りたいのですが。そのためのフックはありますか?

背景:エントリの順序を保持したいのですが、次にユーザーがこのビューを表示したときに、最も使用頻度の低い順序でエントリを表示したいと思います。

24
Marcel Stör

この質問にまだ興味がある人のために(または答え:P)

ITableView API

この編集/完了ボタンが押されるたびにこれらのメソッドが呼び出される- (void)setEditing:(BOOL)editing animated:(BOOL)animateメソッドがあることが明らかになりました。使用された(BOOL)editingパラメータを確認するだけです。最後になりましたが、最初に編集/完了ボタンから適切なメソッドを呼び出す必要があります。

このメソッドをuitableviewクラスに追加するだけです

- (void)setEditing:(BOOL)editing animated:(BOOL)animate
{
    [super setEditing:editing animated:animate];
    if(editing)
    {
        NSLog(@"editMode on");
    }
    else
    {
        NSLog(@"Done leave editmode");
    }
}
41
dustin.b

UITableViewをオーバーライドしたくない人のために(たとえば、UITableViewControllerを使用している場合)、これが私が使用するシンプルでクリーンなソリューションです。基本的には、独自の編集ボタンアイテムを作成し、tableViewのeditingフラグを使用して編集と完了を追跡する必要があります。ケーキのアイシングの場合、新しいアイテムを追加するためにテーブルが空になると、(「編集」ではなく)「+」ボタンが表示されます。

- (void) updateEditButtonVisibility
{
    // tableItems represents the data structure that s
    if ([tableItems count] > 0)
    {
        UIBarButtonSystemItem editButtonType = self.tableView.editing ? UIBarButtonSystemItemDone : UIBarButtonSystemItemEdit;
        UIBarButtonItem *editButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:editButtonType
                                                                                        target:self
                                                                                        action:@selector(editButtonTouched)];

        self.navigationItem.rightBarButtonItem = editButtonItem;
        [editButtonItem release];
    }
    else
    {
        UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                                                       target:self
                                                                                       action:@selector(addButtonTouched)];
        self.navigationItem.rightBarButtonItem = addButtonItem;
        [addButtonItem release];
    }
}

- (void) editButtonTouched
{
    // edit/done button has been touched

    [self.tableView setEditing:!self.tableView.editing animated:YES];
    [self updateEditButtonVisibility];
}

- (void) addButtonTouched
{
    // logic to allow user to add new items goes here
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self updateEditButtonVisibility];
}
3
Dia Kharrat

これは、バーボタンが押されたときに通知を受け取る標準​​的な方法です。

self.editButtonItem.target = self;
self.editButtonItem.action = @selector(buttonPushed:);

...

- (void) buttonPushed:(id)sender
{
// do stuff here
}
2
Ramin

アクションを変更することが可能です。編集ボタンをクリックすると、削除ボタンが表示されますが、代わりに拒否/確認/変更ボタンを表示することができます。そして、削除オプションの代わりに対応するアクションを変更します

ありがとうミンダス

0
mindus