Delegateをtimer処理で使うには?
画面遷移先でユーザーがタイマーを設定し、そのタイマーを画面遷移する前の元のViewController
で作動させるにはどうしたらいいでしょうか?func prepare
で値を受け渡してタイマーを作動させようとしてみたのですが、エラーはないもののうまくいかず、protocol
を使うのかなと思っているのですが、これも実装の順番や方法がイマイチわかりません。
以下、私が試してみたコードを抜粋して載せます。解決策を教えてくだされば幸いです。
//class FirstViewController
//whatToDoLbl: UILabel!,taskUnSetted: UILabel!,taskContent: UILabel!
//var timer = Timer()
//var count: Int = 0
@IBAction func unwindToFirstView(segue: UIStoryboardSegue){
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "backToFVCSet"
{
let EditPopUpVC = segue.destination as! EditPopUpViewController
if EditPopUpVC.doneOutlet.isHidden == false
{
whatToDoLbl = EditPopUpVC.whatToDoLblAtEditVC
taskUnSetted = EditPopUpVC.taskUnSettedAtEditVC
whatToDoLbl.isHidden = false
taskUnSetted.isHidden = true
taskContent.isHidden = false
count = EditPopUpVC.countAtEditVC
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(FirstViewController.counter), userInfo: nil, repeats: true)
}
}
}
func counter()
{
let leftHours = Int(count/3600)
let leftMinutes = Int((count - leftHours * 3600)/60)
let leftSeconds = count % 60
let hh = NSString(format: "%02d", leftHours)
let mm = NSString(format: "%02d", leftMinutes)
let ss = NSString(format: "%02d", leftSeconds)
if count > 0
{
taskContent.text = "\(hh)時間 \(mm)分 \(ss)秒"
}
else
{
taskContent.text = "終了!"
timer.invalidate()
}
}
以下サブクラスです。(画面遷移先)
class EditPopUpViewController: ・・・{
override func viewDidLoad() {
//略
}
override func didReceiveMemoryWarning() {
//略
}
@IBAction func closePopUp(_ sender: Any)//完了ボタン
{
//var countAtEditVC = 0
//@IBOutlet weak var wheelTimerOutlet: UIDatePicker!
countAtEditVC = Int(wheelTimerOutlet.countDownDuration)
dismiss(animated: true, completion: nil)
}
コードに関してご不明な点・不明瞭な点があればお伝えいただけると嬉しいです。よろしくお願いします。