質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

3965閲覧

常にNavigationBarにアイコンを表示していたい

Y_M

総合スコア265

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/02/27 08:11

編集2017/02/27 09:17

###前提・実現したいこと
スクショ
掲題の通り、Pushで画面が切り替わっても常にNavigationBarに右側のアイコンを表示したいと考えています。
またどの画面でも押した際の処理は共通なので、その処理もどこかのクラスにまとめて書けないのでしょうか。

ボタンの動作としては画面右上4分の1にviewを生成、更にその上にボタンを配置し、
そのボタンが押されるとメインのビューが遷移する形になります。

###該当のソースコード

Swift

1let menuImage = #imageLiteral(resourceName: "header_nav").withRenderingMode(.alwaysOriginal) 2let menu = UIBarButtonItem(image: menuImage, style: .done, target: self, action: #selector(self.openMenu(_:))) 3self.navigationItem.rightBarButtonItem = menu

現状すべてのViewのViewWillAppearで、この処理を記述しています。
しかしこれをすべての画面に実装し、ボタン押下時の処理まで書くとかなりのコード量になると思います。

###試したこと
UINavigationControllerクラスをカスタムし、NavigationControllerに関連付けたが表示されなかった。

###補足情報(言語/FW/ツール等のバージョンなど)
Xcode8.2.1
Swift3

###追記

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { let image = #imageLiteral(resourceName: "header_nav").withRenderingMode(.alwaysOriginal) let menu = UIBarButtonItem(image: image, style: .done, target: self, action: nil) navigationController.navigationItem.rightBarButtonItem = menu }

###追記2
イメージ説明
イメージとしてですが「Custom Navigation」に先程のメニューアイコン追加の処理を書くと
「なびげーしょんばー」の画面では表示されません。

これを「Custom Navigation」1箇所に書くだけで、
「なびげーしょんばー」「なびげーしょんばー2」の画面に継続して表示させることは可能なのか。という質問になります。

「Custom Navigation」のみに記載しただけではだめな場合、別に方法はあるのでしょうか。
やはり各画面で実装していくしかないのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

その1

UINavigationControllerDelegateは?

その2

共通の処理を書いたViewControllerを継承するのは?

投稿2017/02/27 08:24

編集2017/02/27 09:21
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y_M

2017/02/27 08:37 編集

知識不足ですみません。 "UINavigationControllerDelegate"といいますと?
fuzzball

2017/02/27 08:53

UIViewControllerのViewWillAppearに書いている処理を navigationController(_:willShow:animated:) に書けないかなぁと。
Y_M

2017/02/27 09:08

追記しました。 こういうことでしょうか? おそらく自分の説明が下手なのですが 「A画面」でメニューボタンの表示と設定を行ったら、Pushで遷移後の画面にもそれ以降の画面にも表示しておきたいという感じです。
fuzzball

2017/02/27 09:16

えーと、思っていることは出来なかったということでしょうか?
Y_M

2017/02/27 09:17

できなかったです。
fuzzball

2017/02/27 09:21

その2を書きました。
Y_M

2017/02/27 09:38

その2の形で実装できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問