2013-11-22 20 views
5

私のアプリケーションでは、いくつかの項目を表示するテーブルビューがあります。 1つのアイテムをクリックすると、新しいテーブルビューが表示されます(ナビゲーションコントローラ:プッシュ)。したがって、Tableビューの最上部には、自動的に戻ってくる「戻る」矢印付きのナビゲーションコントローラがあります。私は右側に "edit"ボタンを有効にしています。iPhone - UITableViewで編集ボタンを選択したときに「追加」ボタンを追加

今、私は編集ボタンをタップしたときに、[戻る]ボタンが消えなければならないと、「+」ボタンではなく、バックボタンであるはずです追加します。これは可能ですか? また、編集と追加ボタンを同時に画面に表示することはできますか?

ありがとう

答えて

7

これは簡単です。ビューコントローラのsetEditing:animated:メソッドをオーバーライドします。これは、編集/完了ボタンがトグルされたときに呼び出されます(標準editButtonItemUIViewControllerから使用していると仮定します)。

この方法では、「追加」ボタンを作成し、左のボタンのボタン項目にします。これは、戻るボタンを非表示にします。 「追加」ボタンを削除すると、戻るボタンが再び表示されます。

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

    if (editing) { 
     // Add the + button 
     UIBarButtonItem *addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction:)]; 
     self.navigationItem.leftBarButtonItem = addBtn; 
    } else { 
     // remove the + button 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
} 
+0

が問題ありません!ありがとうございました! –

0

戻る矢印ボタンは、ナビゲーションコントローラのボタンです。あなたは、コードの下に使用したナビゲーションコントローラにカスタムボタンを追加したい場合は今

self.navigationItem.hidesBackButton=YES; 

: - - :あなたは、同じボタンを消えるしたいのであれば、あなたは以下のコードを記述する必要が

UIBarButtonItem *customButton = 
[[UIBarButtonItem alloc] 
          initWithTitle:@"Add"            

    style:UIBarButtonItemStyleBordered 
          target:self 
          action:@selector(yourMethod:)]; 
self.navigationItem.rightBarButtonItem = customButton; 
0

テーブルビューの編集が開始されたら、プログラムでバックボタンを非表示にしてから、ナビゲーションバーの左側に[追加]ボタンを追加できます。

[self.navigationItem setHidesBackButton:YES]; 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonPressed)]; 
[self.navigationItem setLeftBarButtonItem:addButton]; 

次に、ユーザーを押すが完了したら、[戻る]ボタンで「追加」ボタンを置き換える:

は、プロパティを持っている:

[self.navigationItem setHidesBackButton:NO]; 

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem; 
+0

どのように編集ボタンのアクションメソッドを作成できますか? –

+0

'leftBarButtonItem'を' backBarButtonItem'でリセットしないでください。 'leftBarButtonItem'を' nil'にセットするだけです。また、戻るボタンを隠す必要はありません。 – rmaddy

+0

@ user2710855これは内蔵されています。私の答えを見てください。 – rmaddy

2

うん、これは私が使用するアプローチがあります[戻る]ボタン、[追加]ボタンとの両方のためのviewDidLoadでそれを設定します。

self.backButton = self.navigationItem.leftBarButtonItem; 
self.addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPressed:)]; 

は今、あなたはちょうどSWに持っていますボタンを押して、「編集」を押すとTableViewの状態を更新します。ここで「編集」ボタンを「完了」に変更します:

- (IBAction)editBarButtonPressed:(UIBarButtonItem *)sender { 
    if (self.tableView.editing == NO) { 
     UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(editBarButtonPressed:)]; 

     self.navigationItem.rightBarButtonItem = myButton; 
     [self.tableView setEditing:YES animated:YES]; 

     [self.navigationItem setLeftBarButtonItem:self.addButton animated:YES]; 
    } else { 
     UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editBarButtonPressed:)]; 

     self.navigationItem.rightBarButtonItem = myButton; 
     [self.tableView setEditing:NO animated:YES]; 

     [self.navigationItem setLeftBarButtonItem:self.backButton animated:NO]; 
    } 
} 

希望の質問にお答えします。 :) br denrase

+1

これは難しいことです。編集/完了ボタンと標準の 'setEditing:animated:'メソッドに標準の 'UIViewController editButtonItem'を使用してください。 – rmaddy

+0

あなたは正しいです、それは簡単です。 :) – denrase

+0

@rmaddyと同意します。なぜあなたはより複雑なステップをとってみたいのか分かりません。 – Blaszard

関連する問題