使用當前運行循環來解決問題會給你帶來各種麻煩。解決此問題的最簡單方法是在單元上具有NSTimer
屬性,並在單元格爲willDisplay
/willEndDisplay
時啓動/停止該屬性。
class CustomCell: UITableViewCell {
var timer: NSTimer?
func startTimer() -> Void {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateUI:", userInfo: nil, repeats: true)
}
func stopTimer() -> Void {
timer?.invalidate()
timer = nil
}
func updateUI(sender: NSTimer?) -> Void {
// update your label here
}
}
class ViewController: UIViewController, UITableViewDelegate {
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if let cell = cell as? CustomCell {
cell.startTimer()
}
}
func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if let cell = cell as? CustomCell {
cell.stopTimer()
}
}
}
我不會_dare_以這種方式使用NSRunLoop。你只是在問問題。 – gnasher729
我對此聲明投了票。 – NCFUSN