2015-03-31 25 views
0

我有一個執行基本倒計時的定時器循環,它將值打印到控制檯。我試圖將該值設置爲標籤的文本值。即使Xcode控制檯顯示計時器值的正確倒計時,應用程序中的標籤仍然顯示0.有關爲何發生這種情況的任何想法?以下是相關代碼:標籤沒有顯示Swift中定時器的值

import UIKit 

class GameViewController: UIViewController { 

    @IBOutlet weak var timerLabel: UILabel! 

    var timerCount = 7 
    var timerRunning = false 
    var timer = NSTimer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.timerCount = 7 

     self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("Counting"), userInfo: nil, repeats: true) 

} 

func Counting(){ 

     timerCount = 7 

     do { 

      println(timerCount) 
      timerRunning = true 
      --timerCount 
      timerLabel.text = "\(timerCount)" 
      println(timerCount) 

     } while timerCount > 0 

    } 

回答

2

Counting()方法錯誤。

你每秒鐘都會啓動計數方法,並在該方法中有一個更新timerLabel.text的循環,但直到Counting()結束時UI纔會更新......這就是爲什麼總是顯示0的原因。只需要減少每秒的計數並更新標籤。

我覺得這是你所需要的:

func Counting(){ 

    if timerCount == 0 
    { 
    timerCount = 7 // or self.timer.invalidate() in case you want to stop it 
    }   
    else 
    { 
    timerCount--; 
    timerLabel.text = "\(timerCount)" 
    println(timerCount) 
    } 
} 

希望它可以幫助

+0

這工作。謝謝!我不明白的是,爲什麼在我的原始代碼中是label.text =「」在循環內傳遞?我用斷點逐句通過了我的代碼,並轉到該行,並沒有更新文本。爲什麼它會在條件成立的情況下執行其他行? – winston 2015-03-31 23:42:27

+1

看這個例子: func example(){timerLabel.text =「7」; timerLabel.text =「6」; timerLabel.text =「5」; timerLabel.text =「4」; timerLabel.text =「3」; timerLabel.text =「2」; timerLabel.text =「1」; timerLabel.text =「0」; } 當你執行這個函數時你會在UI中看到什麼只是timerLabel.text =「0」。認爲每次函數結束時UI都會更新。所以該函數結束時的標籤等於「0」。因此,用戶界面顯示你只是「0」。 – 2015-03-31 23:58:34

+0

啊,好的。這就說得通了。再次感謝! – winston 2015-04-01 01:03:45