รวดเร็ว
คำตอบสั้น ๆ
ใช้สังเกตการณ์มากกว่าNotificationCenter
viewWillAppear
override func viewDidLoad() {
super.viewDidLoad()
// set observer for UIApplication.willEnterForegroundNotification
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
// my selector that was defined above
@objc func willEnterForeground() {
// do stuff
}
คำตอบที่ยาว
เพื่อหาเมื่อ app กลับมาจากพื้นหลังใช้สังเกตการณ์มากกว่าNotificationCenter
viewWillAppear
นี่คือโครงการตัวอย่างที่แสดงเหตุการณ์ที่เกิดขึ้นเมื่อ (นี่คือการปรับคำตอบวัตถุประสงค์ -C นี้ )
import UIKit
class ViewController: UIViewController {
// MARK: - Overrides
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
// add notification observers
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
print("view will appear")
}
override func viewDidAppear(_ animated: Bool) {
print("view did appear")
}
// MARK: - Notification oberserver methods
@objc func didBecomeActive() {
print("did become active")
}
@objc func willEnterForeground() {
print("will enter foreground")
}
}
ในการเริ่มต้นแอพลำดับแรกคือ:
view did load
view will appear
did become active
view did appear
หลังจากกดปุ่มโฮมแล้วนำแอปกลับไปที่พื้นหน้าลำดับผลลัพธ์คือ:
will enter foreground
did become active
ดังนั้นหากคุณพยายามที่จะใช้ในviewWillAppear
ตอนแรกUIApplication.willEnterForegroundNotification
อาจเป็นสิ่งที่คุณต้องการ
บันทึก
ตั้งแต่ iOS 9 และใหม่กว่าคุณไม่จำเป็นต้องลบผู้สังเกตการณ์ เอกสารฯ :
หากแอปของคุณกำหนดเป้าหมายเป็น iOS 9.0 และใหม่กว่าหรือ macOS 10.11 และใหม่กว่าคุณไม่จำเป็นต้องยกเลิกการลงทะเบียนผู้สังเกตการณ์ด้วยdealloc
วิธีการนั้น
applicationWillEnterForeground:
เพื่อพิจารณาว่าแอปพลิเคชันของคุณเข้าสู่สถานะใช้งานอีกครั้งเมื่อใด