私のテーブルビューコントローラーには
self.navigationItem.leftBarButtonItem = self.editButtonItem;
これにより、左上隅に通常の編集/完了ボタンが表示されます。したがって、ユーザーが[編集]をクリックすると、ボタンのキャプションが[完了]に変わり、テーブルエントリが削除または並べ替えられる場合があります。ユーザーが実際に「完了」をクリックしたら通知を受け取りたいのですが。そのためのフックはありますか?
背景:エントリの順序を保持したいのですが、次にユーザーがこのビューを表示したときに、最も使用頻度の低い順序でエントリを表示したいと思います。
この質問にまだ興味がある人のために(または答え:P)
この編集/完了ボタンが押されるたびにこれらのメソッドが呼び出される- (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");
}
}
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];
}
これは、バーボタンが押されたときに通知を受け取る標準的な方法です。
self.editButtonItem.target = self;
self.editButtonItem.action = @selector(buttonPushed:);
...
- (void) buttonPushed:(id)sender
{
// do stuff here
}
アクションを変更することが可能です。編集ボタンをクリックすると、削除ボタンが表示されますが、代わりに拒否/確認/変更ボタンを表示することができます。そして、削除オプションの代わりに対応するアクションを変更します
ありがとうミンダス