2016-04-08 14 views
0

私はスイフト2+を使用しており、ストップウォッチ/タイマーを行っています。Swiftクラスでビューコントローラのラベルをリアルタイムで更新するにはどうすればよいですか?

基本的に、ViewControllerから呼び出すことができるStopWatch2クラスがあります。

クラス内のタイマーを開始、実行、停止、リセットすることができます。

また、私のViewControllerでラベルを更新することもできますが、 'now'のみです。たとえば、タイマーを開始すると、ラベルは7:59と表示されます。印刷ログに、タイマーがカウントダウンしているのがわかりますが、ラベルを更新していません。 「停止」をクリックすると、ラベルは現在の時刻で更新されます。

すべてのコードは、https://github.com/markie1313/Debate-Timerです。コードサンプルを投稿する必要がある場合、私は喜んでいるでしょう。

どうすればよいですか?

マーク

UPDATE:遅延の

申し訳ありません。ここで私はViewControllerを

クラスViewController2ACために使用しているコードは次のとおりです。ここでのUIViewController { VAR newTimer = StopWatch2()

@IBOutlet var timerText: UILabel! 
@IBOutlet var startStopButton: UIButton! 

@IBAction func startStopTimer(sender: AnyObject) { 
    timerText.text = "8:00" 
    newTimer.startStop() 
    timerText.text = newTimer.stopWatchString 

}

override func viewDidLoad() { 
    super.viewDidLoad() 
    newTimer.minutes = 7 
    newTimer.seconds = 60 
}  

}

は関数であります呼び出される:

func startStop() { 

    if startStopwatch == true { 
     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateStopwatch"), userInfo: nil, repeats: true) 
     startStopwatch = false 
     startStopButtonExt = "Stop" 
    } else { 
     timer.invalidate() 
     startStopwatch = true 
     startStopButtonExt = "Start" 
    } 
} 

func updateStopwatch() -> String { 
    seconds -= 1 
    if seconds == 0 && minutes == 0 { 
     timer.invalidate() 
     labelText = "0:00" 
     return self.labelText 
    } 
    if seconds == 0 { 
     labelText = "\(minutes):00" 
     print(labelText) 
     minutes -= 1 
     seconds = 60 
    } 
    var secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)" 
    var minutesString = minutes > 9 ? "\(minutes)" : "\(minutes)" 
    if seconds == 60 { 
     secondsString = "00" 
     minutesString = "\(minutes + 1)" 
    } 
    stopWatchString = "\(minutesString):\(secondsString)" 
    labelText = stopWatchString 
    print("\(stopWatchString) test") 
    return self.stopWatchString 
} 
+0

リンクする代わりにコードを投稿する必要があります。これをタイマーのコードに制限し、ラベルを更新する方法 – Wain

+0

メインスレッドでUIが常に更新されていることを確認してください。 – vadian

+1

実際に使用するビューコントローラーのコードを投稿してください。混乱しているファイルです。また、StopWatch2をどこでもインスタンス化することはありません。 –

答えて

0

メインスレッドのUIラベルを別のものから操作するたびに、view.setNeedsDisplayに電話する必要があります。代わりのnumber > 9

String(format: "%02d", myInt) 

これはあなたの番号に先行ゼロを適用します。また

timerText.text = labelText 

は、私はあなたがフォーマット文字列を使用することをお勧め:

0

あなたはupdateStopwatch方法の終わりにラベルテキストを更新する必要があります

関連する問題