Swift-обновите значение в RootViewController из AppDelegate, когда приложение переходит в фоновое состояние
У меня есть простое приложение с одним главным видом только.
Я пытаюсь показать обновленное значение времени в метке внутри представления, когда приложение переходит в фоновое состояние.
сценарий:
1-проект приложения с одним видом
2-только один вид (ViewController) с одной меткой для отображения даты
3 - в AppDelegate: applicationWillEnterForeground получить текущее время
func applicationWillEnterForegound(application: UIAPplication){
var date:String = GetDate()
--> update View Label with date here
}
4 - показать текущее время на ViewController
Я пытаюсь с делегатами, но проблема в том, что представление было последним видимым элементом в приложении, а методы как viewDidLoad, viewWillAppear вызываются один раз.
3 ответов
как отмечали другие, вы можете использовать структуру уведомлений, чтобы сделать это из вашего контроллера вида, поэтому вашему appDelegate не нужно ссылаться на контроллер вида. Добавьте такую строку в контроллер:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: #selector(appWillEnterForeground),
name: NSNotification.Name.UIApplicationWillEnterForeground,
object: nil
в Swift 3 синтаксис немного меняется:
NotificationCenter.default.addObserver(self,
selector: #selector(appWillEnterForeground),
name: NSNotification.Name.UIApplicationWillEnterForeground,
object: nil)
затем определите функцию, которую вы называете в селекторе:
@objc func appWillEnterForeground() {
//...
}
Вы можете слушать UIApplicationWillEnterForegroundNotification
внутри ViewController
. Если вы знаете, что его представления видны, он может найти дату и изменить свою собственную метку.
Спасибо ребята за ответ. Я реализовал теперь уведомление в главном представлении и решить эту проблему.
override func viewDidLoad(){
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.updateDate), name: UIApplicationWillEnterForegroundNotification, object: nil)
}
func updateDate(){
labelInfo.text = theDate
}
спасибо