質問編集履歴

1

情報追記

2019/08/24 05:49

投稿

Capibara
Capibara

スコア34

test CHANGED
File without changes
test CHANGED
@@ -107,3 +107,99 @@
107
107
 
108
108
 
109
109
  NavigationController配下で自動生成される UIViewController.navigationItemを利用しているのが原因だろうなぁと、薄々感じています。リファレンスにも何かそれらしい事が書いてあるように見えるのですが、google翻訳さんの力を借りても理解できませんでした。
110
+
111
+
112
+
113
+ ## 追記情報です
114
+
115
+ 比較の為にNavigationControllerを使わないケースの再現方法を追記します。
116
+
117
+ ### NavigationControllerを使わないケース
118
+
119
+ #### storyboard
120
+
121
+ ![イメージ説明](26d6c245716205cfbf459805f53b9a67.png)
122
+
123
+ デフォルトのViewControllerにNavigation Bar部品を追加しました。
124
+
125
+ UINavigationItemはmyNavigationItemという名前でOutlet接続します。
126
+
127
+
128
+
129
+ #### ソースコード
130
+
131
+ ```
132
+
133
+ import UIKit
134
+
135
+
136
+
137
+ class ViewController: UIViewController {
138
+
139
+
140
+
141
+ @IBOutlet weak var myNavigationItem: UINavigationItem!
142
+
143
+
144
+
145
+ var okButton: UIBarButtonItem!
146
+
147
+
148
+
149
+ // NGボタンの初期化
150
+
151
+ var ngButton = UIBarButtonItem(title: "NG", style: .plain, target: self, action: #selector(ngButtonTapped(_:)))
152
+
153
+
154
+
155
+ override func viewDidLoad() {
156
+
157
+ super.viewDidLoad()
158
+
159
+
160
+
161
+ // OKボタンの初期化
162
+
163
+ okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))
164
+
165
+
166
+
167
+ // navigationItemに2つのボタンをセット
168
+
169
+ myNavigationItem.rightBarButtonItems = [ngButton, okButton]
170
+
171
+ }
172
+
173
+
174
+
175
+ // OKボタンをタップした時のアクション
176
+
177
+ @objc func okButtonTapped(_ sender: UIBarButtonItem) {
178
+
179
+ print("OK!")
180
+
181
+ }
182
+
183
+
184
+
185
+ // NGボタンをタップした時のアクション
186
+
187
+ @objc func ngButtonTapped(_ sender: UIBarButtonItem) {
188
+
189
+ print("NG!")
190
+
191
+ }
192
+
193
+ }
194
+
195
+ ```
196
+
197
+ ### 解説
198
+
199
+ 前のケースと違うのは、NavigationControllerによって自動生成されたNavigationItemではなく、storyboard上で手動で付加したものを使った事だけです。
200
+
201
+ ところが、こちらのケースでは"OK"ボタン"NG"ボタン共に、正しくデバッグ表示されます。
202
+
203
+
204
+
205
+ なぜ、最初のケースの"NG"ボタンのactionメソッドだけが機能しないのか知りたいです。