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

質問編集履歴

3

追記

2018/10/21 22:20

投稿

mogiruri
mogiruri

スコア37

title CHANGED
File without changes
body CHANGED
@@ -145,8 +145,12 @@
145
145
 
146
146
 
147
147
  func setTime(_ time: String){
148
- timerLabel.text = time
148
+      // time には値がある
149
- print("success")
149
+ print("success (time)")
150
+ // nilだと言われる。 didloadで行うとしっかり入っていた
151
+ print(timerLabel.text)
152
+ timerLabel.text = time // nilが入っていると言われます。
153
+
150
154
  }
151
155
  }
152
156
 
@@ -218,8 +222,6 @@
218
222
  seconds = Int(hField.text!)!
219
223
  totalTime = hours + minutes + seconds
220
224
 
221
- //delegateを使い上記クラスへアクセス
222
- // delegate先のメッソドないのプリントがされてなかったので多分機能していません
223
225
  var delTime = delegate?.timeString(time: TimeInterval(totalTime))
224
226
  delegate?.setTime(delTime!)
225
227
 
@@ -236,9 +238,15 @@
236
238
  super.viewDidLoad()
237
239
  tableView.backgroundColor = UIColor.clear
238
240
  settingView.backgroundColor = UIColor(white: 0.7, alpha: 0.8)
241
+      
242
+      let vc = ViewController()
243
+ self.delegate = vc
239
244
 
240
245
  }
241
246
 
242
247
  }
243
248
 
244
- ```
249
+ ```
250
+
251
+ ## 追記
252
+ デリゲートはできました。が、ViewController下部のsetTime()ないで timerLabel.textに代入できません。

2

質問変更

2018/10/21 22:20

投稿

mogiruri
mogiruri

スコア37

title CHANGED
@@ -1,1 +1,1 @@
1
- swift: 別クラスのラベル、関数にアクセスしたい
1
+ swift: デリゲートをして別クラスのラベル、関数にアクセスしたい
body CHANGED
@@ -1,8 +1,7 @@
1
1
  こんにちは。
2
2
  現在アプリを作成していて、BクラスからAクラスの fooLabel.text に、Aクラスの関数を用いて値を代入したいのですがどうもできずに困っています。
3
3
 
4
- labelがあるクラスのインスタンス作成してみましたがうまく行きませんでした
4
+ 調べてみたデリゲート実装してみたのですやらメソッドにアクセスでていません。
5
- これがデリゲートと言われるものなのでしょうか
6
5
 
7
6
  助言をお願いいたします。
8
7
 
@@ -14,22 +13,21 @@
14
13
 
15
14
  import UIKit
16
15
 
16
+
17
- class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
17
+ class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, VCDelegate {
18
18
 
19
19
 
20
20
  @IBOutlet weak var layerView: UIView!
21
- @IBOutlet weak var timerLabel: UILabel! //ここに別クラスからテキストを入れたい
21
+ @IBOutlet weak var timerLabel: UILabel!
22
22
  @IBOutlet weak var startBtn: CustomButton!
23
23
  @IBOutlet weak var stopBtn: CustomButton!
24
24
  @IBOutlet weak var finishBtn: CustomButton!
25
25
 
26
-   var totalTime = 0
26
+ var totalTime = 0
27
-
27
+
28
28
  var timer = Timer()
29
29
  var isTimerRunning = false
30
30
  var resumeTapped = false
31
-
32
- static var mainVC = ViewController()
33
31
 
34
32
 
35
33
  @IBAction func startBtn(_ sender: Any) {
@@ -54,14 +52,15 @@
54
52
 
55
53
  @IBAction func finishBtn(_ sender: Any) {
56
54
 
57
- alertShow()
55
+ alertShow()
58
-
59
56
  }
60
57
 
61
58
 
62
59
  override func viewDidLoad() {
63
60
  super.viewDidLoad()
61
+
64
62
  layerView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
63
+
65
64
  print(timerLabel.text!)
66
65
  }
67
66
 
@@ -84,12 +83,12 @@
84
83
  extension ViewController {
85
84
 
86
85
 
87
- // これを別クラスから使用したい
86
+
88
87
  func timeString(time: TimeInterval) -> String{
89
88
  let hour = Int(time) / 3600
90
89
  let minute = Int(time) / 60 % 60
91
90
  let second = Int(time) % 60
92
-
91
+ print("success")
93
92
  return String(format:"%02i:%02i:%02i", hour, minute, second)
94
93
  }
95
94
 
@@ -144,9 +143,13 @@
144
143
 
145
144
  }
146
145
 
146
+
147
+ func setTime(_ time: String){
148
+ timerLabel.text = time
149
+ print("success")
150
+ }
147
151
  }
148
152
 
149
-
150
153
  ```
151
154
  .
152
155
  .
@@ -159,8 +162,17 @@
159
162
 
160
163
  var records = ["test", "tst"]
161
164
 
165
+ //プロトコル
166
+ protocol VCDelegate{
167
+ func timeString(time: TimeInterval) -> String
168
+ func setTime(_ time: String)
169
+ }
170
+
171
+
162
172
  class settingVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
163
173
 
174
+ var delegate: VCDelegate?
175
+
164
176
  @IBOutlet weak var settingView: DesignableView!
165
177
  @IBOutlet weak var tableView: UITableView!
166
178
  @IBOutlet weak var hField: UITextField!
@@ -172,7 +184,6 @@
172
184
  var seconds = 0
173
185
  var totalTime = 0
174
186
 
175
- let mainVC = ViewController()
176
187
 
177
188
 
178
189
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
@@ -206,10 +217,13 @@
206
217
  minutes = Int(mField.text!)! * 60
207
218
  seconds = Int(hField.text!)!
208
219
  totalTime = hours + minutes + seconds
209
-
210
-        // ここで上記クラスのラベルに、上記クラスの関数を使って値をいれたい
211
- mainVC.timerLabel.text = mainVC.timeString(time: TimeInterval(totalTime))
212
220
 
221
+ //delegateを使い上記クラスへアクセス
222
+ // delegate先のメッソドないのプリントがされてなかったので多分機能していません
223
+ var delTime = delegate?.timeString(time: TimeInterval(totalTime))
224
+ delegate?.setTime(delTime!)
225
+
226
+
213
227
  self.dismiss(animated: true, completion: nil)
214
228
  }
215
229
 
@@ -223,9 +237,6 @@
223
237
  tableView.backgroundColor = UIColor.clear
224
238
  settingView.backgroundColor = UIColor(white: 0.7, alpha: 0.8)
225
239
 
226
- //確認のため、画面が変わった後にアクセスしてプリントできるか試しましたがnilが入ってると言われました
227
- print(mainVC.timerLabel.text!)
228
-
229
240
  }
230
241
 
231
242
  }

1

コード変種

2018/10/21 11:48

投稿

mogiruri
mogiruri

スコア37

title CHANGED
File without changes
body CHANGED
@@ -154,13 +154,6 @@
154
154
 
155
155
  アクセスしたい側のclass
156
156
  ```swift
157
- //
158
- // settingVC.swift
159
- // 12_ImageTimer
160
- //
161
- // Created by shota ito on 20/10/2018.
162
- // Copyright © 2018 shota ito. All rights reserved.
163
- //
164
157
 
165
158
  import UIKit
166
159