web-dev-qa-db-ja.com

プログラムでUIBarButtonItemをUINavigationBarに追加する

UINavigationBarUIInterfaceBuilderを立ち寄りました。このビューをモーダルで表示し、UIBackBarButtonを最後のビューに戻したいだけです。宣言されたUINavigationBarのアウトレットとプロパティがあります。 viewDidLoadメソッドで、次のようにUIBackButtonを作成できると思いました。

UIBarButtonItem *backButton = 
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleBordered 
                                              target:self 
                                              action:@selector(goBack)];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

しかし、UIBackBarButtonItemUINavigationBarが表示されません。私のUINavigationBarがこれにUIBackBarButtonItemを追加しようとしていることを知っているとは思わないので、私はここで何か間違っていると思います。代わりにNSArrayを作成してボタンを配置し、代わりにNavigationBarのsetItemsを実行する必要がありますか?

同様に、navigationItemプロパティの機能とUINavigationBarのsetItemsの機能が混同されています。任意の助けいただければ幸いです。ありがとう!

19
Crystal

BackBarButtonItemを追加しないモーダルビューでBack Button Itemを設定しようとしています。これにより、ボタン(または、そのための任意の種類の戻るボタン)が表示されなくなります。 backBarButtonItemは主に、新しいビューコントローラー(一番上のアイテム)をプッシュしたときに親(下の次のアイテム)から追加された戻るボタンを持つプッシュされたビューコントローラーで使用するためのものです。 Apple UINavigationItem Documentation は言う:

このアイテムがナビゲーションバーのバックアイテムである場合(トップアイテムの下の次のアイテムである場合)は、ナビゲーションバーの戻るボタンとして表される場合があります。このプロパティを使用して、戻るボタンを指定します。設定するバックバーボタン項目のターゲットとアクションはnilにする必要があります。デフォルト値は、ナビゲーションアイテムのタイトルを表示するバーボタンアイテムです。

希望どおりに左側に戻るボタンを表示するには、変更してみてください

self.navigationItem.backBarButtonItem = backButton;

self.navigationItem.leftBarButtonItem = backButton;
16
Suhail Patel

このような呼び出しをビューコントローラから行う

{
    NextViewController* vcRootView = [[NextViewController alloc] initWithNibName:@"NextView" bundle:[NSBundle mainBundle]];
    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vcRootView];
    [vcRootView release];

    [self.navigationController presentModalViewController:navController animated:YES];
    [navController release];    

}

nextViewControllerを呼び出し側ビューのモーダルビューとして表示し、NextViewControllerにはそのためのnavigationControllerがあります。

NextViewController実装ファイルで必要なのはこれだけです

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self 
                                                                  action:@selector(barButtonBackPressed:)];
    self.navigationItem.leftBarButtonItem = backButton;
    [backButton release];
}


-(void)barButtonBackPressed:(id)sender{
    [self dismissModalViewControllerAnimated:YES];
}

modalviewを閉じるための[戻る]ボタンがあります。それが役に立てば幸い。

12
Rahul Sharma

以下のコードスニペットを使用します。

//Add button to NavigationController
UIBarButtonItem *backButton = 
 [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@“back”, @"")
                                  style:UIBarButtonItemStylePlain 
                                 target:self 
                                 action:@selector(goBack)];

self.navigationItem.leftBarButtonItem = backButton;

//Perform action on back Button
- (void) goBack {    // Go back task over-here
}

利用可能なさまざまなスタイルのタイプは次のとおりです。

UIBarButtonItemStylePlain, UIBarButtonItemStyleBordered, UIBarButtonItemStyleDone
8

このセッターは、新しいUIBarButtonItemを作成せずに使用できます。

[self.navigationItem.leftBarButtonItem setAction:@selector(doBackButton:)];
[self.navigationItem.leftBarButtonItem setTarget:self];
3
Sergey Nikitin