質問編集履歴

3

追記

2018/10/21 22:20

投稿

mogiruri
mogiruri

スコア37

test CHANGED
File without changes
test CHANGED
@@ -292,9 +292,17 @@
292
292
 
293
293
  func setTime(_ time: String){
294
294
 
295
- timerLabel.text = time
295
+      // time には値がある
296
-
296
+
297
- print("success")
297
+ print("success (time)")
298
+
299
+ // nilだと言われる。 didloadで行うとしっかり入っていた
300
+
301
+ print(timerLabel.text)
302
+
303
+ timerLabel.text = time // nilが入っていると言われます。
304
+
305
+
298
306
 
299
307
  }
300
308
 
@@ -438,10 +446,6 @@
438
446
 
439
447
 
440
448
 
441
- //delegateを使い上記クラスへアクセス
442
-
443
- // delegate先のメッソドないのプリントがされてなかったので多分機能していません
444
-
445
449
  var delTime = delegate?.timeString(time: TimeInterval(totalTime))
446
450
 
447
451
  delegate?.setTime(delTime!)
@@ -474,6 +478,12 @@
474
478
 
475
479
  settingView.backgroundColor = UIColor(white: 0.7, alpha: 0.8)
476
480
 
481
+      
482
+
483
+      let vc = ViewController()
484
+
485
+ self.delegate = vc
486
+
477
487
 
478
488
 
479
489
  }
@@ -485,3 +495,9 @@
485
495
 
486
496
 
487
497
  ```
498
+
499
+
500
+
501
+ ## 追記
502
+
503
+ デリゲートはできました。が、ViewController下部のsetTime()ないで timerLabel.textに代入できません。

2

質問変更

2018/10/21 22:20

投稿

mogiruri
mogiruri

スコア37

test CHANGED
@@ -1 +1 @@
1
- swift: 別クラスのラベル、関数にアクセスしたい
1
+ swift: デリゲートをして別クラスのラベル、関数にアクセスしたい
test CHANGED
@@ -4,9 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- labelがあるクラスのインスタンス作成してみましたがうまく行きませんでした
7
+ 調べてみたデリゲート実装してみたのですやらメソッドにアクセスでていません。
8
-
9
- これがデリゲートと言われるものなのでしょうか
10
8
 
11
9
 
12
10
 
@@ -30,7 +28,9 @@
30
28
 
31
29
 
32
30
 
31
+
32
+
33
- class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
33
+ class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, VCDelegate {
34
34
 
35
35
 
36
36
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  @IBOutlet weak var layerView: UIView!
40
40
 
41
- @IBOutlet weak var timerLabel: UILabel! //ここに別クラスからテキストを入れたい
41
+ @IBOutlet weak var timerLabel: UILabel!
42
42
 
43
43
  @IBOutlet weak var startBtn: CustomButton!
44
44
 
@@ -48,9 +48,9 @@
48
48
 
49
49
 
50
50
 
51
-   var totalTime = 0
51
+ var totalTime = 0
52
-
53
-
52
+
53
+
54
54
 
55
55
  var timer = Timer()
56
56
 
@@ -58,10 +58,6 @@
58
58
 
59
59
  var resumeTapped = false
60
60
 
61
-
62
-
63
- static var mainVC = ViewController()
64
-
65
61
 
66
62
 
67
63
 
@@ -110,9 +106,7 @@
110
106
 
111
107
 
112
108
 
113
- alertShow()
109
+ alertShow()
114
-
115
-
116
110
 
117
111
  }
118
112
 
@@ -124,8 +118,12 @@
124
118
 
125
119
  super.viewDidLoad()
126
120
 
121
+
122
+
127
123
  layerView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
128
124
 
125
+
126
+
129
127
  print(timerLabel.text!)
130
128
 
131
129
  }
@@ -170,7 +168,7 @@
170
168
 
171
169
 
172
170
 
173
- // これを別クラスから使用したい
171
+
174
172
 
175
173
  func timeString(time: TimeInterval) -> String{
176
174
 
@@ -180,7 +178,7 @@
180
178
 
181
179
  let second = Int(time) % 60
182
180
 
183
-
181
+ print("success")
184
182
 
185
183
  return String(format:"%02i:%02i:%02i", hour, minute, second)
186
184
 
@@ -290,12 +288,20 @@
290
288
 
291
289
 
292
290
 
291
+
292
+
293
+ func setTime(_ time: String){
294
+
295
+ timerLabel.text = time
296
+
297
+ print("success")
298
+
299
+ }
300
+
293
301
  }
294
302
 
295
303
 
296
304
 
297
-
298
-
299
305
  ```
300
306
 
301
307
  .
@@ -320,10 +326,28 @@
320
326
 
321
327
 
322
328
 
329
+ //プロトコル
330
+
331
+ protocol VCDelegate{
332
+
333
+ func timeString(time: TimeInterval) -> String
334
+
335
+ func setTime(_ time: String)
336
+
337
+ }
338
+
339
+
340
+
341
+
342
+
323
343
  class settingVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
324
344
 
325
345
 
326
346
 
347
+ var delegate: VCDelegate?
348
+
349
+
350
+
327
351
  @IBOutlet weak var settingView: DesignableView!
328
352
 
329
353
  @IBOutlet weak var tableView: UITableView!
@@ -346,8 +370,6 @@
346
370
 
347
371
 
348
372
 
349
- let mainVC = ViewController()
350
-
351
373
 
352
374
 
353
375
 
@@ -414,13 +436,19 @@
414
436
 
415
437
  totalTime = hours + minutes + seconds
416
438
 
417
-
418
-
439
+
440
+
419
-        // ここで上記クラスのラベルに、上記の関数を使って値をいれたい
441
+ //delegateを使い上記クラスへア
442
+
420
-
443
+ // delegate先のメッソドないのプリントがされてなかったので多分機能していません
444
+
421
- mainVC.timerLabel.text = mainVC.timeString(time: TimeInterval(totalTime))
445
+ var delTime = delegate?.timeString(time: TimeInterval(totalTime))
446
+
422
-
447
+ delegate?.setTime(delTime!)
423
-
448
+
449
+
450
+
451
+
424
452
 
425
453
  self.dismiss(animated: true, completion: nil)
426
454
 
@@ -448,12 +476,6 @@
448
476
 
449
477
 
450
478
 
451
- //確認のため、画面が変わった後にアクセスしてプリントできるか試しましたがnilが入ってると言われました
452
-
453
- print(mainVC.timerLabel.text!)
454
-
455
-
456
-
457
479
  }
458
480
 
459
481
 

1

コード変種

2018/10/21 11:48

投稿

mogiruri
mogiruri

スコア37

test CHANGED
File without changes
test CHANGED
@@ -310,20 +310,6 @@
310
310
 
311
311
  ```swift
312
312
 
313
- //
314
-
315
- // settingVC.swift
316
-
317
- // 12_ImageTimer
318
-
319
- //
320
-
321
- // Created by shota ito on 20/10/2018.
322
-
323
- // Copyright © 2018 shota ito. All rights reserved.
324
-
325
- //
326
-
327
313
 
328
314
 
329
315
  import UIKit