在应用程序达到前景后呈现模态的最佳方法

时间:2018-09-27 16:02:42

标签: ios swift firebase-realtime-database firebase-authentication modalviewcontroller

我的iOS应用程序中的用户具有两种状态,即登录和注销。我正在使用Firebase SDK进行身份验证和实时数据库数据传递。

对于已登录的用户,如果某个警报的特定条件为真,我想展示自定义的应用内警报模式。这些条件是日期驱动的,即用户将在某些日期收到特定的警报,而在其他日期则不会。这意味着条件不是由用户输入决定的。

当服务器返回满足特定警报条件的条件时,将有不同的状态。这些是我能想到的:

  • 用户可以从被取消身份验证的状态打开应用 在应用初始化期间重新建立,即记录 out->已登录。
  • 用户可以从后台状态打开应用。
  • 日期更改时,用户可以处于应用内。

我的问题是什么是最佳实践?我正在考虑的三种方法(也许都不是最好的)是:

  1. Singleton-让AlertManager单例监听满足条件的警报条件,然后单例导航视图控制器树以找到当前的前景视图控制器来呈现警报
  2. 协议-具有所有视图控制器都采用的协议。由于无法从协议默认实现中覆盖viewDidAppear方法,因此无法完全确定该怎么做。由于这种原因,不确定这种方法是否可行。
  3. 继承-具有所有自定义View Controller继承的ViewController基类。该基类在其viewDidAppear方法中处理警报检查。

要考虑的切线问题是,当我需要呈现警报视图控制器时,如果已经存在呈现视图控制器,我应该如何处理?我不想打扰用户,所以我希望在当前显示的视图控制器被关闭后将要显示的警报排队。

1 个答案:

答案 0 :(得分:0)

您可以在AppDelegate.swift

中使用此功能
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
        [UIApplicationLaunchOptionsKey: Any]?) -> Bool

您的案例的示例

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
    [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    //Check if User logged in 
    if logged 
    {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = 
        storyboard.instantiateViewController(withIdentifier: "yourLoggedinVC")
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    } else {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = 
        storyboard.instantiateViewController(withIdentifier: "yourLoggedOutVC")
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()

}