質問編集履歴
1
情報追記
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
|
+

|
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メソッドだけが機能しないのか知りたいです。
|