0

アプリケーションデリゲートで NavigationController を作成し、次のコードを使用してプログラムでカスタムボタンを追加しています。

self.navCntrl = [[UINavigationController alloc]initWithRootViewController:self.viewController];
// -- Adding INFO button to Navigation bar --
UIBarButtonItem *infoButton =  [[UIBarButtonItem alloc]
                                initWithTitle:@"i"
                                style:UIBarButtonItemStyleBordered
                                target:self
                                action:@selector(showInfo)];
self.navCntrl.topViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:infoButton, nil];
self.window.rootViewController = self.navCntrl;

しかし、問題は、2 番目のページを navigationController にプッシュすると、キャンセル ボタンがナビゲーション バーに表示されないことです。最初のページに戻ると、キャンセル ボタンがあります。そのため、どうやらボタンは最初のビューにのみ追加されます。

これに対する 1 つの解決策は、上記のカスタム ボタンをすべてのビュー コントローラーに繰り返し追加することです (コードをコピーして貼り付けます)。同じナビゲーションコントローラーが使用されているため、他の方法があるに違いないと思います。あるとすれば何ですか?

前もって感謝します

4

1 に答える 1

1

ナビゲーション コントローラーのナビゲーション バーに表示されるボタンは、ナビゲーション コントローラーに属しておらず、個々のビュー コントローラーのナビゲーションアイテムのプロパティです。通常、これらのボタンは、ナビゲーション コントローラー全体ではなく、現在表示されているビュー コントローラーに適用されるアクションを実行します。

ナビゲーション階層内のすべてのビュー コントローラーに同じボタンを付ける必要がある場合は、どこにでもコードをコピー アンド ペーストせずに、自分自身をナビゲーション コントローラーとして設定し、次のようdelegateに実装できます。navigationController:willShowViewController:animated:

- (void)navigationController:(UINavigationController *)navigationController  willShowViewController:(UIViewController *)viewController  animated:(BOOL)animated
{
    //Assuming you have initialized self.infoButtonItem elsewhere...:
    viewController.navigationItem.rightBarButtonItem = self.infoButtonItem;
}
于 2013-03-28T18:36:15.980 に答える