標準の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");
}
}
アプリケーションを起動すると、viewDidLoadが呼び出されます。
私のシナリオ:
-ホームボタンを押します(applicationDidEnterBackground
)
-アプリケーションのリコール(applicationWillEnterForeground
)
and viewDidLoad
は呼び出されません。
オーバーライドする別の関数はありますか?
SwiftでviewWillAppear
を呼び出したい場合はこれを使用してください。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated) // No need for semicolon
}
ベストプラクティスは、ViewControllerでUIApplicationWillEnterForegroundNotification
およびUIApplicationWillEnterBackgroundNotification
に登録することです
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")
}
ノアの回答に基づく:
ViewController.Swiftに更新機能を追加し、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();
}
出力:
viewDidLoad
refresh
refresh
refresh
refresh
viewDidLoad
は、View Controllerのビューが最初にロードされたときにのみ呼び出されます。その後、メモリに残ります。したがって、通常は、View Controllerの別のインスタンスを作成するまで再び呼び出されません。アプリケーションがフォアグラウンドに入ったときにView Controllerのコンテンツを更新する必要がある場合は、それを行うメソッドを作成してapplicationWillEnterForeground
から呼び出す必要があります。
@Sunkasと同じですが、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")
}