最初のビューコントローラーがナビゲーションコントローラーとタブバーコントローラーに埋め込まれているアプリで作業しています。
私のアプリには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に追加のコードがないとまたはでは機能しません。
最初のナビゲーションコントローラーを削除します。2番目は、プッシュセグエを使用するだけで、戻るボタンを追加する必要はありません。3番目は、self.navigationItem.leftBarButtonItemを使用してみます(最初にselfを追加してみてください)。*元の答えはコメントでした。
の代わりに
navigationController?.navigationItem.leftBarButtonItem = leftItem
行う
navigationItem.leftBarButtonItem = leftItem
更新ストーリーボードでビューコントローラーに直接追加することをお勧めします
私も同じ問題に遭遇しました。
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
セグエは2つありました。1つはストーリーボードセグエ経由、もう1つはプログラマティックです。ストーリーボードのセグエにボタンが表示されました。しかし、プログラム的セグエはボタンのないビューを示しました。
プログラム的なセグエのために、私は使用していました:
_present(theNewVC, animated: true)
_
ボタンを次のように変更すると、ボタンが表示され、正しく機能しました。
_show(theNewVC, sender: self)
_
ドキュメントによれば、present(...)
はビューコントローラをモーダルで提示します。どうやらモーダルビューコントローラーはナビゲーションバーボタンを取得しません。さらに、ストーリーボードのセグエを_Present Modally
_に変更してこれを確認しました-ボタンもそこに表示されなくなりました。
(Xcode 9を使用して、Swift 4)
これは最近私に起こりました。私はエルシンが言ったことをやっていたが、役に立たなかった。もう少し後戻りし、これが原因であることがわかりました。
nav.pushViewController(notifications, animated: false) nav.pushViewController(interactionCreateOrEdit, animated: false)
に変更しました
nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)
そして、UIBarButtonItemsが再び現れ始めました。
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メソッドに書き込みます。