2016-12-16 5 views
1

後NSTimerラベルを更新してください:は私がのviewDidLoadで初期設定の数を持っているセグエ

countDownLabel.alpha = 1 
    countDownLabel.text = "01:30" 
    swipeLeft.alpha = 0 
    swipeRight.alpha = 0 
    pressPlayToStartOr.alpha = 0 
    swipeToChangeTheSeq.alpha = 0 
    countDownPauseLbl.alpha = 0 

私は(私はNSTimerを、同様のviewDidLoad内の内部タイマーのFUNCアップデートを()入れながらきていますそれはviewDidLoadの外側のUIButtonによってトリガされます)。私は、UI View Controllerから離れてもタイマーは動き続けます。タイマービューコントローラーに戻ると、タイマーの音が聞こえますが、タイマービューコントローラーが初期状態に更新され、タイマーが重複するように再度実行することができます。この場合、タイマー終了後のプログラムによるセグは機能しません。私は間違ったアプローチを使用したかもしれないが、それが修正されることを願っています。私がアプリ内のどこにいても、どのようにラベルを更新することができますか?

+1

「タイマー」を「シングルトン」にします。 – aircraft

+0

ありがとうございますが、初心者には詳細が必要です。これは私がシングルトンコードクラスであることが判明しました。Singleton {static let sharedInstance = Singleton()}私はタイマーをどのように統合しますか? –

答えて

1

効果:

the result

SingletonTimer.swiftにおいて:

// 
// SingletonTimer.swift 
// testSwiftUITextField 
// 
// Created by leo on 2016/12/17. 
// Copyright © 2016年 leo. All rights reserved. 
// 

import UIKit 

class SingletonTimer: NSObject { 

private static let sharedInstance = SingletonTimer() 
class var sharedSingletonTimer:SingletonTimer { 

    return sharedInstance 
} 

var timeCount:Int = 100 

func countDown() { 

    timeCount -= 1 
    timer_closure(timeCount) 
} 

lazy var timer:Timer = { 

    var timer:Timer 

    if #available(iOS 10.0, *) { 
     timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { (timer) in 

      self.countDown() 
     }) 
    } else { 
     // Fallback on earlier versions 

     timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(countDown), userInfo: nil, repeats: true) 
    } 

    return timer 
}() 

var timer_closure:(Int)->Void = { (count) in 

} 

} 

ViewController.swiftにおいて:

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var label: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

} 

ViewController2.swiftにおいて:

import UIKit 

class ViewController2: UIViewController { 


@IBOutlet weak var label: UILabel! 

var timer:Timer? = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 

    timer = SingletonTimer.sharedSingletonTimer.timer 
    SingletonTimer.sharedSingletonTimer.timer_closure = { (timeCount) in 

     print("\(timeCount)") 
     self.label.text = "\(timeCount)s !" 
    } 

    if timer != nil { 
     timer?.fire() 
    } 
} 

} 
+0

それは私が必要なものです。ありがとうございます。 –

関連する問題