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

回答編集履歴

3

修正

2017/12/13 06:59

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -1,1 +1,55 @@
1
+ ###追記
2
+ あまり回答が意味を成していないのですが一応おいておきます。
3
+
4
+ ###考察
5
+
6
+ かなり考えたのですが自分の知識のどこに誤解があるのか結局分からず可能な限り近めの構成でなおかつ最小の構成を用意してテストしました。
7
+ 環境
8
+ swift4
9
+ xcode9.2
10
+ ```swift4
11
+ class ViewController: UIViewController {
12
+ @IBAction func tap(_ sender: UIButton) {
13
+ let textVC = TextViewController()
14
+ print("textField = (textVC.textField) in ViewController")
15
+ textVC.embed(in: self)
16
+ }
17
+
18
+ override func viewDidLoad() {
19
+ super.viewDidLoad()
20
+ }
21
+ override func didReceiveMemoryWarning() {
22
+ super.didReceiveMemoryWarning()
23
+ }
24
+ }
25
+ ```
26
+ ```swift4
27
+ class TextViewController: UIViewController, UITextFieldDelegate {
28
+ @IBOutlet weak var textField: UITextField! //from CustomTextField.xib
29
+
30
+ override func viewDidLoad() {
31
+ super.viewDidLoad()
1
- (contents is deleted)
32
+ textField.delegate = self
33
+ print("call textField = (textField) in viewDidLoad")
34
+ }
35
+ override func didReceiveMemoryWarning() {
36
+ super.didReceiveMemoryWarning()
37
+ }
38
+ func embed(in parent: UIViewController) {
39
+ self.view.frame = parent.view.bounds
40
+ parent.view.addSubview(self.view)
41
+ self.didMove(toParentViewController: parent)
42
+ }
43
+
44
+ }
45
+ ```
46
+ 画像に表示されているcustomclassはFile's Ownerのものです。
47
+ ![image](8d5759d8d69a4fda8c6ac3bee9f0e0a6.png)
48
+ TextViewControllerにあるtextFieldはCustomTextField.xibよりIBOutlet接続してあります。
49
+ printの結果は
50
+ ```
51
+ textField = nil in ViewController
52
+ (lldb)
53
+ ```
54
+ となり、textFieldがnilであるため```textField.delegate = self```の行でFatal errorとなりました。つまり質問の中にあるinputTextは**どこか別のところから接続してあるのではないか**と考えられます。またFile's OwnerであってもIBOutlet接続だけではダメでロード作業は必要になるはずです。
55
+ 以上より回答はcustomviewのある.xibファイルから正しくIBOutlet接続を行い、ロードも正しく行う、となります。

2

削除

2017/12/13 06:59

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -1,65 +1,1 @@
1
- かなり考えたのですが自分の知識のどこに誤解があるのか結局分からず可能な限り近めの構成でなおかつ最小の構成を用意してテストしました。
2
-
3
- 環境
4
- swift4
5
- xcode9.2
6
-
7
- ```swift4
8
- class ViewController: UIViewController {
9
-
10
- @IBAction func tap(_ sender: UIButton) {
11
- let textVC = TextViewController()
12
- print("textField = (textVC.textField) in ViewController")
13
- textVC.embed(in: self)
14
- }
15
-
16
- override func viewDidLoad() {
17
- super.viewDidLoad()
18
- }
19
-
20
- override func didReceiveMemoryWarning() {
21
- super.didReceiveMemoryWarning()
22
- }
23
-
24
-
25
- }
26
- ```
27
-
28
- ```swift4
29
- class TextViewController: UIViewController, UITextFieldDelegate {
30
-
31
- @IBOutlet weak var textField: UITextField! //from CustomTextField.xib
32
-
33
- override func viewDidLoad() {
34
- super.viewDidLoad()
35
- textField.delegate = self
1
+ (contents is deleted)
36
- print("call textField = (textField) in viewDidLoad")
37
- }
38
-
39
- override func didReceiveMemoryWarning() {
40
- super.didReceiveMemoryWarning()
41
- }
42
-
43
- func embed(in parent: UIViewController) {
44
- self.view.frame = parent.view.bounds
45
- parent.view.addSubview(self.view)
46
- self.didMove(toParentViewController: parent)
47
- }
48
-
49
- }
50
- ```
51
- 画像に表示されているcustomclassはFile's Ownerのものです。
52
- ![image](8d5759d8d69a4fda8c6ac3bee9f0e0a6.png)
53
-
54
- TextViewControllerにあるtextFieldはCustomTextField.xibよりIBOutlet接続してあります。
55
-
56
- printの結果は
57
-
58
- ```
59
- textField = nil in ViewController
60
- (lldb)
61
- ```
62
-
63
- となり、textFieldがnilであるため```textField.delegate = self```の行でFatal errorとなりました。つまり質問の中にあるinputTextは**どこか別のところから接続してあるのではないか**と考えられます。またFile's OwnerであってもIBOutlet接続だけではダメでロード作業は必要になるはずです。
64
-
65
- 以上より回答はcustomviewのある.xibファイルから正しくIBOutlet接続を行い、ロードも正しく行う、となります。

1

変更

2017/12/13 06:55

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -1,3 +1,65 @@
1
+ かなり考えたのですが自分の知識のどこに誤解があるのか結局分からず可能な限り近めの構成でなおかつ最小の構成を用意してテストしました。
2
+
3
+ 環境
4
+ swift4
5
+ xcode9.2
6
+
7
+ ```swift4
8
+ class ViewController: UIViewController {
9
+
10
+ @IBAction func tap(_ sender: UIButton) {
11
+ let textVC = TextViewController()
12
+ print("textField = (textVC.textField) in ViewController")
13
+ textVC.embed(in: self)
14
+ }
15
+
16
+ override func viewDidLoad() {
17
+ super.viewDidLoad()
18
+ }
19
+
20
+ override func didReceiveMemoryWarning() {
21
+ super.didReceiveMemoryWarning()
22
+ }
23
+
24
+
25
+ }
26
+ ```
27
+
28
+ ```swift4
29
+ class TextViewController: UIViewController, UITextFieldDelegate {
30
+
31
+ @IBOutlet weak var textField: UITextField! //from CustomTextField.xib
32
+
33
+ override func viewDidLoad() {
34
+ super.viewDidLoad()
35
+ textField.delegate = self
36
+ print("call textField = (textField) in viewDidLoad")
37
+ }
38
+
39
+ override func didReceiveMemoryWarning() {
40
+ super.didReceiveMemoryWarning()
41
+ }
42
+
43
+ func embed(in parent: UIViewController) {
44
+ self.view.frame = parent.view.bounds
45
+ parent.view.addSubview(self.view)
46
+ self.didMove(toParentViewController: parent)
47
+ }
48
+
49
+ }
50
+ ```
1
- 最後ついたのdelegateをStoryboard側設定をることぐらいです
51
+ 画像表示されてるcustomclassFile's Ownerのものです。
2
- これでダメなら申し訳ないですが自分ではお手上げです。
3
- ![image](12bb56a0e8bd6725958e8427e7651f60.jpeg)
52
+ ![image](8d5759d8d69a4fda8c6ac3bee9f0e0a6.png)
53
+
54
+ TextViewControllerにあるtextFieldはCustomTextField.xibよりIBOutlet接続してあります。
55
+
56
+ printの結果は
57
+
58
+ ```
59
+ textField = nil in ViewController
60
+ (lldb)
61
+ ```
62
+
63
+ となり、textFieldがnilであるため```textField.delegate = self```の行でFatal errorとなりました。つまり質問の中にあるinputTextは**どこか別のところから接続してあるのではないか**と考えられます。またFile's OwnerであってもIBOutlet接続だけではダメでロード作業は必要になるはずです。
64
+
65
+ 以上より回答はcustomviewのある.xibファイルから正しくIBOutlet接続を行い、ロードも正しく行う、となります。