質問するログイン新規登録

質問編集履歴

1

情報追記

2019/08/24 05:49

投稿

Capibara
Capibara

スコア34

title CHANGED
File without changes
body CHANGED
@@ -52,4 +52,52 @@
52
52
  ### 試したこと
53
53
  storyboard上でUINavigationControllerを使用せず、Navigation BarとNavigation Item部品を手動で配置して試した所、上記のような初期化位置でも両方デバッグ出力される事を確認しました。
54
54
 
55
- NavigationController配下で自動生成される UIViewController.navigationItemを利用しているのが原因だろうなぁと、薄々感じています。リファレンスにも何かそれらしい事が書いてあるように見えるのですが、google翻訳さんの力を借りても理解できませんでした。
55
+ NavigationController配下で自動生成される UIViewController.navigationItemを利用しているのが原因だろうなぁと、薄々感じています。リファレンスにも何かそれらしい事が書いてあるように見えるのですが、google翻訳さんの力を借りても理解できませんでした。
56
+
57
+ ## 追記情報です
58
+ 比較の為にNavigationControllerを使わないケースの再現方法を追記します。
59
+ ### NavigationControllerを使わないケース
60
+ #### storyboard
61
+ ![イメージ説明](26d6c245716205cfbf459805f53b9a67.png)
62
+ デフォルトのViewControllerにNavigation Bar部品を追加しました。
63
+ UINavigationItemはmyNavigationItemという名前でOutlet接続します。
64
+
65
+ #### ソースコード
66
+ ```
67
+ import UIKit
68
+
69
+ class ViewController: UIViewController {
70
+
71
+ @IBOutlet weak var myNavigationItem: UINavigationItem!
72
+
73
+ var okButton: UIBarButtonItem!
74
+
75
+ // NGボタンの初期化
76
+ var ngButton = UIBarButtonItem(title: "NG", style: .plain, target: self, action: #selector(ngButtonTapped(_:)))
77
+
78
+ override func viewDidLoad() {
79
+ super.viewDidLoad()
80
+
81
+ // OKボタンの初期化
82
+ okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))
83
+
84
+ // navigationItemに2つのボタンをセット
85
+ myNavigationItem.rightBarButtonItems = [ngButton, okButton]
86
+ }
87
+
88
+ // OKボタンをタップした時のアクション
89
+ @objc func okButtonTapped(_ sender: UIBarButtonItem) {
90
+ print("OK!")
91
+ }
92
+
93
+ // NGボタンをタップした時のアクション
94
+ @objc func ngButtonTapped(_ sender: UIBarButtonItem) {
95
+ print("NG!")
96
+ }
97
+ }
98
+ ```
99
+ ### 解説
100
+ 前のケースと違うのは、NavigationControllerによって自動生成されたNavigationItemではなく、storyboard上で手動で付加したものを使った事だけです。
101
+ ところが、こちらのケースでは"OK"ボタン"NG"ボタン共に、正しくデバッグ表示されます。
102
+
103
+ なぜ、最初のケースの"NG"ボタンのactionメソッドだけが機能しないのか知りたいです。