当我们关闭通知设置覆盖时,视图将出现未触发

View will appear is not firing when we dismiss notification settings overlay

单击按钮时我有一个视图控制器我将用户带到应用程序设置。

 UIApplication.openApplicationSettings()

当我从 appsettings 返回到 app 时,viewwillappear 方法没有触发。

或者是否有任何其他方法可以让我们知道应用程序设置已关闭并且用户现在可以看到屏幕。

您应该使用应用程序生命周期事件 (SceneDelegate/AppDelegate),而不是查看控制器生命周期事件(viewDidLoadviewDidAppear 等)。 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)
   }