質問編集履歴

1

コードの省略していた部分を記載しました。

2021/05/10 00:18

投稿

kageusu
kageusu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,11 +1,15 @@
1
1
  ### 「touchesBegan」の処理で「outletCollection」を使用したい
2
2
 
3
- swift5で、画面をタップする毎に10個のImageViewの画像を順番に変更するシステムを作ろうとしています。
3
+ swiftで、画面をタップする毎に10個のImageViewの画像を順番に変更するシステムを作ろうとしています。
4
4
 
5
5
  10個のImageViewは、全てOutletCollectionとして管理し、それぞれに違うtagつけています。(0~9)
6
6
 
7
7
 
8
8
 
9
+ ※追記:処理は、**UIViewのXibファイル**上で行っています。
10
+
11
+
12
+
9
13
  しかし、画面をタップするとそのOutletCollectionがnilであるとエラーが表示され、前に進めない状況です。
10
14
 
11
15
  以下に詳しい状況を記載します。
@@ -128,6 +132,10 @@
128
132
 
129
133
 
130
134
 
135
+
136
+
137
+
138
+
131
139
  ### 試したこと
132
140
 
133
141
 
@@ -154,6 +162,134 @@
154
162
 
155
163
  ```
156
164
 
165
+
166
+
167
+ ###※追記 省略していたコードの全体を記載します
168
+
169
+ ```swift
170
+
171
+ class AnimationView: UIView {
172
+
173
+
174
+
175
+ @IBOutlet var imageViews: [UIImageView]!
176
+
177
+
178
+
179
+ // ガチャ結果のデータを呼び出す。
180
+
181
+ let data = [["画像ファイル名1","1"],
182
+
183
+ ["画像ファイル名2","2"],
184
+
185
+ ["画像ファイル名3","3"],
186
+
187
+ ["画像ファイル名4","4"],
188
+
189
+ ["画像ファイル名5","5"],
190
+
191
+ ["画像ファイル名6","6"],
192
+
193
+ ["画像ファイル名7","7"],
194
+
195
+ ["画像ファイル名8","8"],
196
+
197
+ ["画像ファイル名9","9"],
198
+
199
+ ["画像ファイル名10","10"],]
200
+
201
+
202
+
203
+ override init(frame: CGRect) {
204
+
205
+ super.init(frame: frame)
206
+
207
+ loadNib()
208
+
209
+
210
+
211
+ //ここではnilのエラーが出ることもなく、しっかりとfor文で処理を回すことができます。
212
+
213
+ for img in imageViews {
214
+
215
+ img.image = UIImage(named: data[img.tag][0])
216
+
217
+ }
218
+
219
+
220
+
221
+ print(imageViews.count) //10 と出力される
222
+
223
+ }
224
+
225
+
226
+
227
+ required init(coder aDecoder: NSCoder) {
228
+
229
+ super.init(coder: aDecoder)!
230
+
231
+ }
232
+
233
+
234
+
235
+ func loadNib(){
236
+
237
+ guard let view = UINib(nibName: "AnimationView", bundle: nil).instantiate(withOwner: self, options: nil).first as? AnimationView else {
238
+
239
+ return
240
+
241
+ }
242
+
243
+ view.frame = self.bounds
244
+
245
+ self.addSubview(view)
246
+
247
+ }
248
+
249
+
250
+
251
+
252
+
253
+ var tagNumber = 0
254
+
255
+ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
256
+
257
+ print(imageViews.count) //nil と出力される
258
+
259
+ if tagNumber < 10 {
260
+
261
+                //↓「imageViewsがnilである」というエラーが発生。
262
+
263
+ for img in imageViews {
264
+
265
+ if img.tag == tagNumber {
266
+
267
+ img.image = UIImage(named: data[tagNumber][0])
268
+
269
+ }
270
+
271
+ }
272
+
273
+ }
274
+
275
+ tagNumber += 1
276
+
277
+ }
278
+
279
+ }
280
+
281
+
282
+
283
+ ```
284
+
285
+
286
+
287
+ ![OutletCollectionの接続](46bb8d766ee0334c1d1baef6890d7db3.png)
288
+
289
+ **File's Owner**の方で接続しています
290
+
291
+
292
+
157
293
  ### 補足情報(FW/ツールのバージョンなど)
158
294
 
159
295