2
计时器可以工作,但控制器中的txtTimer(textfield)不会更新。 println输出正确,但视图没有。如何将IBOutlet设置为另一个对象的引用
如何将控制器中的txtTimer引用到Timer类中的txtTimer中?
FirstViewController:
import UIKit
var timer = Timer()
class FirstViewController: UIViewController {
@IBOutlet weak var txtTimer: UILabel! = timer.txtTimer
@IBOutlet var btnStop: UIButton!
@IBOutlet var btnStart: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// Events
@IBAction func btnStartTimer_Click(sender: UIButton) {
if (!timer.isRunning()) {
timer.start()
sender.setTitle("Pause", forState: UIControlState.Normal)
self.btnStop.setTitle("Stop", forState: UIControlState.Normal)
self.btnStop.hidden = false
}
else {
timer.pause()
sender.setTitle("Start", forState: UIControlState.Normal)
}
}
@IBAction func btnStopTimer_Click(sender: UIButton) {
sender.hidden = true
timer.stop()
btnStart.setTitle("Start", forState: UIControlState.Normal)
btnStop.setTitle("Stop", forState: UIControlState.Normal)
}
}
定时器:
import UIKit
class Timer:NSObject {
var timer: NSTimer = NSTimer()
var time: Int
var state: UInt8
var running: Bool
var txtTimer: UILabel = UILabel()
override init() {
self.time = 0
self.state = 0
self.running = false
}
func destroyInterval() -> Timer {
self.timer.invalidate()
// self.timer = nil
return self
}
func getFormattedTime() -> String {
if self.getState() == 0 { return "00:00:00" }
var hours = Int(self.time/3600)
var minutes = Int(self.time/60)
var seconds = Int(self.time % 60)
// Add leading zeros
var strHours: String = hours > 9 ? String(hours) : "0" + String(hours)
var strMinutes: String = minutes > 9 ? String(minutes) : "0" + String(minutes)
var strSeconds: String = seconds > 9 ? String(seconds) : "0" + String(seconds)
return strHours + ":" + strMinutes + ":" + strSeconds
}
func getState() -> UInt8 {
return self.state
}
func getStateText() -> String {
switch(self.state) {
case 0:
return "stopped"
case 1:
return "running"
case 2:
return "paused"
default:
return "404"
}
}
func getTime() -> Int {
return self.time
}
func incrementTime() -> Timer {
self.time++
return self
}
func isRunning() -> Bool {
return self.running
}
func pause() -> Timer {
self.setRunning(false)
.setState(2)
.destroyInterval()
return self
}
private func setRunning(status: Bool) -> Timer {
self.running = status
return self
}
func setState(state: UInt8) -> Timer {
self.state = state
return self
}
func setTxtTimer() -> Timer {
self.txtTimer.text = self.getFormattedTime()
return self
}
func start() -> Timer {
self.setRunning(true)
.setState(1)
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
return self
}
func stop() -> Timer {
self.setRunning(false)
.setState(0)
.destroyInterval()
.setTxtTimer()
return self
}
func update() -> Timer {
println(self.getFormattedTime())
self.incrementTime()
.setTxtTimer()
return self
}
}