web-dev-qa-db-ja.com

navigationItem.backBarButtonItemが機能していませんか?前のメニューがまだボタンとして表示されているのはなぜですか?

ドリルダウンナビゲーションコントローラーで[戻る]ボタンをカスタマイズしようとしています。

私の1つのビューコントローラーには、Addボタンがあり、コードによってプログラムで新しいUIViewControllerが生成されます。

- (void)add:(id)sender 
{
    MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil];

    [self.navigationController pushViewController:addController animated:YES];

    [addController release];
}

これは機能し、追加ボタンをクリックすると、新しいビューにドリルダウンします。 MyAddViewController.mviewDidLoadメソッドの内部:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

しかし、これは機能していません。ナビゲーションコントローラーの戻るボタンは、スタック上の前のビューのコントローラーのtitleのままです。ラインは何もしないようです。私は何か見落としてますか?

ありがとう

25
skålfyfan

これは、self.navigationItem.backBarButtonItemを持つviewControllerの後の各子でのみ機能します。

28
WrightsCS

self.navigationItem.backBarButtonItemは、ビューコントローラによって押されたビューに表示される戻るボタン用です。そのため、その行を前のビューコントローラに移動する必要があります。

52
benwong

backBarButtonItemleftBarButtonItemを混同している。 UINavigationItemの-​​ backBarButtonItem docs から:

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

したがって、変更する場合:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

に:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

期待通りの効果が得られると思います。

13
Matt Wilding

backBarButtonItemを置き換えることはできませんが、leftBarButtonItemを使用して上書きできます。ただし、新しいボタンが戻るボタンと同じように動作するようにするには、新しいボタンのターゲットとアクションを次のように設定する必要があります。

- (void)dismissMyView {
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
        initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered
        target:self action:@selector(dismissMyView)];
}
5
Greg Young

ViewController AがViewController Bをプッシュしている間にバックバーボタンタイトルを設定したい場合は、「self.navigationItem.backBarButtonItem = ..」を設定する必要があります。

0
lynulzy