所以我试图每1秒钟刷新一次功能,以便更新标签,不幸的是它不会因某种原因而触发。代码如下以及评论。
import UIKit
class ViewController: UIViewController {
@IBOutlet var tt_CountDown: UILabel!
var tt_currentDate = NSDate()
var tt_objCalendar = NSCalendar.currentCalendar()
override func viewDidLoad() {
super.viewDidLoad()
self.timeClassManagement()
//The timer I'm using to call the function to repeat
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("timeClassManagement"), userInfo: nil, repeats: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func timeClassManagement(){
//the function that holds the code for the label below
tt_CountDown.text = "\(String(tt_hour)):\(String(tt_minute)):\(String(tt_second))"
}
}
答案 0 :(得分:3)
问题不在于他没有调用其动作方法的计时器;这工作正常。问题在于您用于更新标签的代码(来自我们的聊天)。
func timeClassManagement(){
var tt_objDateFormat = tt_objCalendar.components( .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate: tt_currentDate)
var tt_hour = tt_objDateFormat.hour
var tt_minute = tt_objDateFormat.minute
var tt_second = tt_objDateFormat.second
tt_CountDown.text = "\(String(tt_hour)):\(String(tt_minute)):\(String(tt_second))"
}
每次调用方法时,您使用的日期tt_currentDate都是相同的。您需要传入当前日期,以便更改。
var tt_objDateFormat = tt_objCalendar.components( .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond, fromDate:NSDate.date())
答案 1 :(得分:1)
只需将函数名的字符串传递给NSTimer
init即可。选择器是一个ObjC构造,接受选择器的方法可以在Swift中给出字符串。
首先timer
应该是属性。它会在viewDidLoad
结束时消失。
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timeClassManagement", userInfo: nil, repeats: true)
在类似问题的答案中提供了更多详细信息:请参阅此处的答案:https://stackoverflow.com/a/24007718/3879