Вид будет отображаться, не срабатывает, когда мы закрываем наложение настроек уведомлений
У меня есть контроллер представления, когда я нажимаю кнопку, я перенаправляю пользователя в настройки приложения.
UIApplication.openApplicationSettings()
Когда я возвращаюсь из настроек приложения в приложение, метод viewwillappear не запускается.
или есть ли какой-либо другой метод, который позволит нам узнать, что настройки приложения закрыты и пользователь видит экран прямо сейчас.
2 ответа
Вы должны использовать события жизненного цикла приложения (SceneDelegate / AppDelegate), а не просматривать события жизненного цикла контроллера (
viewDidLoad
,
viewDidAppear
, так далее). sceneDidBecomeActive(_:)
должно подойти для ваших целей - для iOS 13+ вы должны использовать
SceneDelegate
для прослушивания фаз сцены, например, переход к настройкам (переход в неактивное состояние), а затем возврат (повторное включение).
/// SceneDelegate.swift
func sceneDidBecomeActive(_ scene: UIScene) {
// Called when the scene has moved from an inactive state to an active state.
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
/// your code here
}
Если вы хотите послушать
sceneDidBecomeActive
прямо в вашем контроллере представления, попробуйте прослушать didActivateNotification
уведомление.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver( /// add observer
self,
selector: #selector(activated),
name: UIScene.didActivateNotification,
object: nil
)
}
@objc func activated() {
print("View controller is back now")
}
}
Подпишитесь на следующие события appdelegate
applicationDidBecomeActive
или
applicationWillEnterForeground
В ViewDidLoad используйте нижеприведенный фрагмент кода
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
и используйте метод ниже
@objc func applicationDidBecomeActive(notification: NSNotification) {
updateTableUI()
}
Удалить наблюдателя
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}