2009-07-01 8 views
24

でボタンのクリックを行って左上隅で定期的に編集/完了]ボタンを生成iPhone、編集するためのフック/私のテーブルビューコントローラでは、テーブルビュー

self.navigationItem.leftBarButtonItem = self.editButtonItem; 

があります。したがって、ユーザが「編集」をクリックすると、ボタンのキャプションが「完了」に変わり、テーブルエントリが削除または並べ替えられます。ユーザーが実際に「完了」をクリックすると、通知を受けたいと思います。そのためのフックはありますか?

背景:エントリの順序を維持したい、つまりユーザーが次回このビューをプルアップするとき、最も最近使用された順序でエントリを提示したいと考えています。

答えて

43

UITableView 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"); 
    } 
} 
+0

setEditing:animated()は、プログラムでビューを配置する場合にも呼び出されます編集モード。私は、外部で編集モードを設定するために使うことができる[super setEditing]だけを呼び出す追加のメソッドを追加しました。 – Symmetric

+0

注: 'UITableView' **デリゲート**として' UIViewController'を使用している場合は、 'UITableView'に**テーブルの**編集ステータスを' [self.tableView setEditing :編集アニメーション:アニメーション] '。 – cloudrave

2

これはバーボタンが押されたときに通知を受けるための標準的な方法である:この質問にはまだinteresedている(または答え:P)人のための

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

... 

- (void) buttonPushed:(id)sender 
{ 
// do stuff here 
} 
+0

さて、私はそれを知っています。要点は、ボタンが何をしているのか(リスト項目の変更、キャプションの切り替えなど)を妨げたくないということです。私は単にそれが「完了」状態でクリックされたことを知りたいと思う。 –

+1

UIBarButtonItemsはUIControlから派生しないので、別のターゲットを追加するだけでは使用できません。あなたはいつもアクションをキャプチャし、自分で状態を維持することができます。それほど難しいことではありません。それ以外の場合は、buttonPushed呼び出し(上記)を取得し、「無視」フラグを設定して、ボタンでワンタイムイベントを合成して戻します。タッチイベントの合成に関する詳細はこちら:http://cocoawithlove.com/2008/10/synthesizing-touch-event-on-iphone.html – Ramin

0

アクションを変更することが可能になるには、このメソッドを追加します。編集ボタンをクリックすると削除ボタンが表示され、拒否/確認/変更ボタンを表示することができます。そして、ここで私が使用し、シンプルでクリーンなソリューションです、削除オプションの代わりに

おかげ MindusのUITableViewを上書きしたくない人のために

3

(例えば、あなたがのUITableViewControllerを使用している場合)に対応するアクションを変更します。基本的には独自の編集ボタンアイテムを作成し、tableViewのeditingフラグを使ってedit vs doneを追跡します。ケーキのアイシングのために、新しい項目を追加するためにテーブルが空の場合、 "+"ボタン( "編集"ではなく)が表示されます。

- (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]; 
} 
関連する問題