質問編集履歴

2

コードを差し替えました。View間の構造のスクショを載せました。

2021/02/18 15:07

投稿

sta_sato
sta_sato

スコア2

test CHANGED
File without changes
test CHANGED
@@ -4,46 +4,28 @@
4
4
 
5
5
 
6
6
 
7
- A、Bという2つの画面があり、A画面内のボタンを押すと、
8
-
9
- B画面に定義しているtableViewを更新する。
7
+ 「Top画面」という画面の上、containerViewを配置し、
10
-
11
-
12
-
13
- (追記)
8
+
14
-
15
- A画面の上に、Viewがあり、このViewの、ContentViewBがあります。
9
+ containerViewのにViewを配置しています。
16
-
10
+
11
+
12
+
17
- ContentViewBに対して、ViewControllerB設定しています。
13
+ Top画面に対して、クラス:ViewControllerを割り当います。
14
+
18
-
15
+ ![イメージ説明](4de89470ec31d3689f323855d752dd85.png)
16
+
17
+
18
+
19
- (名前がわかりづくなってしまっていますが、ContainerA~Cのうち
19
+ Top画面の配下のViewの、さに配下のCotainerA
20
-
20
+
21
- ContainerAに設定していクラスをviewControllerBとして質問を書ています)
21
+ 下記の「冷蔵庫画面」を配置していて、クラス:cabinViewControllerを設定しています
22
-
23
-
24
-
22
+
25
- ![![イメージ説明](59b57ac798e6f7d819d245035f6f2818.png)](24d374ba135c20cb149c090afcf450da.png)
23
+ ![イメージ説明](fc13ce6538de8093cd52d02c0b378594.png)
26
-
27
-
28
-
29
-
30
-
31
- A画面のクラス:viewControllerA
32
-
33
- B画面のクラス:viewControllerB
34
-
35
-
36
-
37
- 上記を、delegateを使って実装したいため、
38
-
39
- A画面のボタンを押したら、viewControllerBでtableViewを更新する処理を実現したいです。
40
24
 
41
25
 
42
26
 
43
27
  ※delegateについての私の理解(間違いありましたらご指摘ください)
44
28
 
45
-
46
-
47
29
  delegateとは、自分のクラスの処理内容を他のクラスに実行してもらう(移譲する)こと。
48
30
 
49
31
  下記の実装が必要。
@@ -86,11 +68,11 @@
86
68
 
87
69
 
88
70
 
89
- ②viewControllerB
71
+ CabinviewController(冷蔵庫画面)
90
72
 
91
73
  ```swift
92
74
 
93
- class CabinViewController:UIViewController, UITableViewDelegate, UITableViewDataSource, ReloadDataDelegate {
75
+ class CabinViewController:UIViewController, UITableViewDelegate, UITableViewDataSource, UINavigationControllerDelegate,ReloadDataDelegate {
94
76
 
95
77
 
96
78
 
@@ -126,24 +108,30 @@
126
108
 
127
109
 
128
110
 
129
- viewControllerA
111
+ ViewController(TOP画面)
130
112
 
131
113
  ```swift
132
114
 
133
- class ViewController: UIViewController, {
115
+ class ViewController: UIViewController, UINavigationControllerDelegate {
134
116
 
135
117
 
136
118
 
137
119
  var delegate:ReloadDataDelegate!
138
120
 
139
-    
140
-
121
+
122
+
141
-   //A画面に載っけるViewの定義
123
+ // MARK: - ContainerView
142
-
143
- @IBOutlet weak var containerView: UIView!
144
124
 
145
125
  var containers:Array<UIView>=[]
146
126
 
127
+ @IBOutlet weak var containerA: UIView!
128
+
129
+ @IBOutlet weak var containerB: UIView!
130
+
131
+ @IBOutlet weak var containerC: UIView!
132
+
133
+
134
+
147
135
 
148
136
 
149
137
  override func viewDidLoad() {
@@ -152,13 +140,11 @@
152
140
 
153
141
 
154
142
 
155
- let viewControllerB = ViewControllerB()
143
+ let cabinVC = CabinViewController()
156
-
144
+
157
- self.delegate = viewControllerB
145
+ self.delegate = cabinVC
158
-
159
-
160
-
161
-   //A画面の上のContentViewとして配置しているB画面を表示(名前がややこしくてすみません)
146
+
147
+
162
148
 
163
149
  containers=[containerA,containerB,containerC]
164
150
 
@@ -170,26 +156,24 @@
170
156
 
171
157
  ~(中略)~
172
158
 
173
- //MARK:- segmentBarの値に応じて、スクロール位置変更
159
+ //MARK:- segmentBarの値に応じて、containerViewの表示切り替え
174
160
 
175
161
  @IBAction func SegmentAction(_ sender: UISegmentedControl) {
176
162
 
177
- // let selectedIndex = segmentBar.selectedSegmentIndex
163
+
178
-
179
-
180
164
 
181
165
  let currentContainerView=containers[sender.selectedSegmentIndex]
182
166
 
183
167
  containerView.bringSubviewToFront(currentContainerView)
184
168
 
185
-
186
-
187
169
  }
188
170
 
189
171
 
190
172
 
191
173
  ~(中略)~
192
174
 
175
+ //NavigationBarのボタン
176
+
193
177
  @IBAction func templateButton(_ sender: Any) {
194
178
 
195
179
  reload()
@@ -214,9 +198,7 @@
214
198
 
215
199
  ### 試したこと
216
200
 
217
- 実行すると、reloadTabeleDate()内の、
218
-
219
- "test"の出力がされることは確認しています。
201
+ 実行すると、reloadTabeleDate()内の、"test"の出力がされることは確認しています。
220
202
 
221
203
 
222
204
 

1

A画面とB画面の関係性を追記しました。B画面を表示している処理を追記しました。コードの誤りを修正しました。

2021/02/18 15:07

投稿

sta_sato
sta_sato

スコア2

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,24 @@
10
10
 
11
11
 
12
12
 
13
+ (追記)
14
+
15
+ A画面の上に、Viewがあり、このViewの下に、ContentViewBがあります。
16
+
17
+ ContentViewBに対して、ViewControllerBを設定しています。
18
+
19
+ (名前がわかりづらくなってしまっていますが、ContainerA~Cのうち、
20
+
21
+ ContainerAに設定しているクラスをviewControllerBとして質問を書いています)
22
+
23
+
24
+
25
+ ![![イメージ説明](59b57ac798e6f7d819d245035f6f2818.png)](24d374ba135c20cb149c090afcf450da.png)
26
+
27
+
28
+
29
+
30
+
13
31
  A画面のクラス:viewControllerA
14
32
 
15
33
  B画面のクラス:viewControllerB
@@ -80,12 +98,6 @@
80
98
 
81
99
 
82
100
 
83
- //処理実行イベントを通知する先
84
-
85
- weak var delegate:ViewController! = nil
86
-
87
-
88
-
89
101
  override func viewDidLoad() {
90
102
 
91
103
  super.viewDidLoad()
@@ -122,6 +134,18 @@
122
134
 
123
135
 
124
136
 
137
+ var delegate:ReloadDataDelegate!
138
+
139
+    
140
+
141
+   //A画面に載っけるViewの定義
142
+
143
+ @IBOutlet weak var containerView: UIView!
144
+
145
+ var containers:Array<UIView>=[]
146
+
147
+
148
+
125
149
  override func viewDidLoad() {
126
150
 
127
151
  super.viewDidLoad()
@@ -132,13 +156,39 @@
132
156
 
133
157
  self.delegate = viewControllerB
134
158
 
159
+
160
+
161
+   //A画面の上のContentViewとして配置しているB画面を表示(名前がややこしくてすみません)
162
+
163
+ containers=[containerA,containerB,containerC]
164
+
165
+ containerView.bringSubviewToFront(containers[containerIndex])
166
+
135
167
  }
136
168
 
137
169
 
138
170
 
139
171
  ~(中略)~
140
172
 
141
-
173
+ //MARK:- segmentBarの値に応じて、スクロール位置を変更
174
+
175
+ @IBAction func SegmentAction(_ sender: UISegmentedControl) {
176
+
177
+ // let selectedIndex = segmentBar.selectedSegmentIndex
178
+
179
+
180
+
181
+ let currentContainerView=containers[sender.selectedSegmentIndex]
182
+
183
+ containerView.bringSubviewToFront(currentContainerView)
184
+
185
+
186
+
187
+ }
188
+
189
+
190
+
191
+ ~(中略)~
142
192
 
143
193
  @IBAction func templateButton(_ sender: Any) {
144
194
 
@@ -154,6 +204,8 @@
154
204
 
155
205
  }
156
206
 
207
+ }
208
+
157
209
 
158
210
 
159
211
  ```