web-dev-qa-db-ja.com

ナビゲーションバーに表示されないバーボタン項目

最初のビューコントローラーがナビゲーションコントローラーとタブバーコントローラーに埋め込まれているアプリで作業しています。

私のアプリには3つの異なるタブがあり、1つのタブは設定ビューです。これは5つのボタンを持つテーブルビューです。タッチすると、すべてのボタンに同じビューコントローラーが表示されます。

いずれかのボタンをタッチしても、緑色のナビゲーションバーが表示されますが、ボタンが機能しません。

ナビゲーションアイテムをストーリーボードのビューにドラッグし、そこにバーボタンアイテムを配置してみました。ストーリーボードにボタンは表示されますが、実行してもアプリに表示されません。

また、viewDidLoad()に次のコードを追加しました。

let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))

//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work

navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem

ただし、効果はありません。

ストーリーボードのビューに正しいUIViewControllerが割り当てられているかどうかを確認し、いくつかのクリーンビルド(CMD + Shift + K)と再ビルド(CMD + B)を行いました。

次の画像は、ストーリーボードの一部のスクリーンショットと、ボタンが表示されないビューでのアプリのスクリーンショットです。

[〜#〜]編集[〜#〜]

ビュー内のコントロールに関する新しいスクリーンショットを追加しました。これらは、私のviewDidLoadに追加のコードがないとまたはでは機能しません。

Screenshot of my Storyboard

Screenshot of my app where the buttons should show up

Screenshot of the the setup of the controls in my view

14
Jules

最初のナビゲーションコントローラーを削除します。2番目は、プッシュセグエを使用するだけで、戻るボタンを追加する必要はありません。3番目は、self.navigationItem.leftBarButtonItemを使用してみます(最初にselfを追加してみてください)。*元の答えはコメントでした。

5
Ersin Sezgin

の代わりに

navigationController?.navigationItem.leftBarButtonItem = leftItem

行う

navigationItem.leftBarButtonItem = leftItem

更新ストーリーボードでビューコントローラーに直接追加することをお勧めします

12
MarkHim

私も同じ問題に遭遇しました。

IOS 11では問題なく動作しますが、iOS 10以下ではプログラムで追加されたUIBarButtonItemsが表示されませんでした。

フレームをUIBarButtonItemに割り当ててください。

let button =  UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
6
iDev

セグエは2つありました。1つはストーリーボードセグエ経由、もう1つはプログラマティックです。ストーリーボードのセグエにボタンが表示されました。しかし、プログラム的セグエはボタンのないビューを示しました。

プログラム的なセグエのために、私は使用していました:

_present(theNewVC, animated: true)
_

ボタンを次のように変更すると、ボタンが表示され、正しく機能しました。

_show(theNewVC, sender: self)
_

ドキュメントによれば、present(...)はビューコントローラをモーダルで提示します。どうやらモーダルビューコントローラーはナビゲーションバーボタンを取得しません。さらに、ストーリーボードのセグエを_Present Modally_に変更してこれを確認しました-ボタンもそこに表示されなくなりました。

(Xcode 9を使用して、Swift 4)

2
leanne

これは最近私に起こりました。私はエルシンが言ったことをやっていたが、役に立たなかった。もう少し後戻りし、これが原因であることがわかりました。

nav.pushViewController(notifications, animated: false) nav.pushViewController(interactionCreateOrEdit, animated: false)

に変更しました

nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)

そして、UIBarButtonItemsが再び現れ始めました。

0
Michael McKenna
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];

    [button setImage:[[UIImage imageNamed:@"BtnBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
    [button.imageView setTintColor:[UIColor whiteColor]];
    [button addTarget:self action:@selector(buttonClicked:)
     forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]
                                   initWithCustomView:button];
    self.navigationItem.leftBarButtonItem = buttonItem;

このコードはViewWillAppearメソッドに書き込みます。

0
saraman