J'ai un projet standard SingleViewApplication.
ViewController.Swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
println("viewDidLoad");
}
}
Quand je lance l'application, viewDidLoad est appelé.
Mon scénario:
- appuyez sur le bouton Accueil (applicationDidEnterBackground)
- application de rappel (applicationWillEnterForeground)
et viewDidLoad n'est pas appelé.
Y a-t-il une autre fonction à remplacer?
Si vous voulez appeler viewWillAppear
dans Swift, utilisez ceci.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated) // No need for semicolon
}
La meilleure pratique consiste à enregistrer UIApplicationWillEnterForegroundNotification
et UIApplicationWillEnterBackgroundNotification
dans votre ViewController.
public override func viewDidLoad()
{
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "applicationWillEnterForeground:", name: UIApplicationWillEnterForegroundNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "applicationWillEnterBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil)
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func applicationWillEnterForeground(notification: NSNotification) {
println("did enter foreground")
}
func applicationWillEnterBackground(notification: NSNotification) {
println("did enter background")
}
Basé sur la réponse de Noé:
sur ViewController.Swift ajoute une fonction d'actualisation et l'appelle depuis AppDelegate.Swift> applicationWillEnterForeground
ViewController.Swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
println("viewDidLoad");
refresh();
}
func refresh(){
println("refresh");
}
}
.
AppDelegate.Swift
func applicationWillEnterForeground(application: UIApplication!) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
ViewController().refresh();
}
Sortie:
viewDidLoad
refresh
refresh
refresh
refresh
viewDidLoad
n’est appelé que lorsque la vue de votre contrôleur de vue est chargée pour la première fois. Elle reste ensuite en mémoire. Par conséquent, elle ne sera plus appelée que lorsque vous avez créé une autre instance du contrôleur de vue. Si vous devez actualiser le contenu de votre contrôleur de vue lorsque l'application entre au premier plan, vous devez créer une méthode pour le faire et l'appeler à partir de applicationWillEnterForeground
.
Identique à @Sunkas mais dans Swift 4:
open override func viewDidLoad()
{
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground(notification:)), name: .UIApplicationWillEnterForeground, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground(notification:)), name: .UIApplicationDidEnterBackground, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@objc private func applicationWillEnterForeground(notification: NSNotification) {
print("will enter foreground")
}
@objc private func applicationDidEnterBackground(notification: NSNotification) {
print("did enter background")
}