Is it possible to refresh a timer in a Today Widget?

前端 未结 2 714
清酒与你
清酒与你 2021-02-14 20:45

I was wondering is it possible to update the text label of a timer in a today widget. I took a look around but nothing helped me.

相关标签:
2条回答
  • 2021-02-14 20:55

    I know this is a Swift question, but I found it looking for Objective-C code and so others may too.

    -(void) viewDidLoad
    {
        [NSTimer scheduledTimerWithTimeInterval:1 // update more than once a second to appear in sync with the system clock
                                         target:self
                                       selector:@selector(updateUi:)
                                       userInfo:nil
                                        repeats:YES];
    
    }
    
    
    -(void) updateUi:(NSTimer *)timer 
    {
       // Update Widget UI as required
    }
    
    0 讨论(0)
  • 2021-02-14 21:14

    Yes you can. I have just tested and it works. You just have to add your timer to the main run loop NSRunLoopCommonModes:

    RunLoop.main.add(yourTimerName, forMode: .commonModes)
    

    import NotificationCenter
    
    class TodayViewController: UIViewController, NCWidgetProviding {
    
        @IBOutlet weak var strTimer: UILabel!
    
        var timer = Timer()
    
        func updateInfo() {
            strTimer.text = Date().description
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateInfo), userInfo: nil, repeats: true)
            RunLoop.main.add(timer, forMode: .commonModes)
        }
        func widgetPerformUpdate(completionHandler: @escaping (NCUpdateResult) -> Void) {
            completionHandler(.newData)
        }
    }
    
    0 讨论(0)
提交回复
热议问题