【问题标题】:iOS - Reset a UITabBarController / UIViewController state after logoutiOS - 注销后重置 UITabBarController / UIViewController 状态
【发布时间】:2017-11-27 12:58:45
【问题描述】:

在我的用户从我的应用程序中注销后,必须显示登录屏幕以允许再次登录。

用户可能会改变,所以我将不得不再次展示主屏幕。上面有一个和我一样工作的代码:

// MainScreenViewController.swift
func onLogoutButtonTouch(_ sender: AnyObject) {
    mainViewController.present(loginViewController, animated: true, completion: {completed in
        mainViewController.dismiss(animated: true, completion: nil)
    })
}

// LoginViewController.swift
func onLoginSuccess() {
    loginViewController.present(mainViewController, animated: true, completion: nil)
}

问题

重新登录后显示我的主屏幕后,mainViewController 的最后状态似乎没有改变,还有其他用户的数据,我不希望这样。 p>

有没有办法完全重置 mainViewController 的状态以避免显示上次登录信息?

【问题讨论】:

    标签: ios swift swift3 uiviewcontroller uitabbarcontroller


    【解决方案1】:

    您需要新的干净的故事板初始化并将其呈现在旧的上。使用 nib 名称初始化故事板,然后实例化初始 viewController 并呈现它。

    【讨论】:

      【解决方案2】:

      这是因为当您关闭 mainViewController 时,loginViewController 仍然存在。

      您可以使用当前情节提要实例化一个新的 loginViewController,然后将其呈现如下:

      let loginVC = storyboard?.instantiateViewController(withIdentifier: "`your view controller storyboard ID here`")
      mainViewController.present(loginVC, animated: true, completion: {completed in
          mainViewController.dismiss(animated: true, completion: nil)
      })
      

      或者使用委托模式来重置登录 VC(如果它已经存在)。比如引入一个名为reset的方法,在注销用户的VC上调用。

      protocol LogoutListener {
          func resetLoginPage()
      }
      
      // LoginViewController.swift
      func onLoginSuccess() {
          mainViewController.logoutListener = self
          loginViewController.present(mainViewController, animated: true, completion: nil)
      }
      
      // MainScreenViewController.swift
      func onLogoutButtonTouch(_ sender: AnyObject) {
          logoutListener?.resetLoginPage()
          mainViewController.present(loginViewController, animated: true, completion: {completed in
              mainViewController.dismiss(animated: true, completion: nil)
      })
      }
      

      【讨论】:

      • 原来在主控制器上一个简单的self.dismiss就解决了这个问题。
      猜你喜欢
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      相关资源
      最近更新 更多