将 iOS 应用恢复到原始状态并在用户注销时清除所有数据
restoring iOS app to original state and clearing all data when user logs out
我有一个带有登录 viewController 的应用程序,它以模态方式呈现一个包含多个选项卡的 tabBarController。每个选项卡都有一个 navigationController 和一堆视图。其中一个选项卡用于设置,并有一个注销按钮。
当用户按下注销按钮时,我想关闭所有选项卡和 tabBarController 的所有导航堆栈并返回到初始登录 viewController。本质上我想将应用程序恢复到初始状态。想知道实现此目标的最佳做法是什么。
谢谢
这是我目前在 "Login" 和 "Main UI"
之间移动的应用程序中使用的代码
let toViewController = // Login view controller here
let fromView = UIApplication.sharedApplication().keyWindow!.rootViewController!.view
UIApplication.sharedApplication().keyWindow?.rootViewController = toViewController
let toView = toViewController.view
toView.addSubview(fromView)
UIView.animateWithDuration(0.38, delay: 0.2, options: [], animations: {
fromView?.transform = CGAffineTransformMakeTranslation(-UIScreen.mainScreen().bounds.width, 0)
}) { finished in
fromView.removeFromSuperview()
}
如果您想在注销后将所有选项卡和 return 应用重置为初始状态,您只需重置 UITabBarController 的 viewControllers 属性。
因此,如果您是 UITabBarController 的子类,则以下代码应将您的应用程序恢复到其原始状态。
self.viewControllers = @[self.viewControllerOne, self.viewControllerTwo, self.viewControllerThree];
来自文档:
If you change the value of this property at runtime, the tab bar controller removes all of the old view controllers before installing the new ones. The tab bar items for the new view controllers are displayed immediately and are not animated into position.
iOS 11 - Swift 4
以 jstn 对我非常有用的答案为基础。我只映射了 VC 以将它们嵌入到导航控制器中。
let rootViewController = UIApplication.shared.keyWindow?.rootViewController
guard let tabController = rootViewController as? TabController {
return
}
//create all your vcs here
// ...
// ...
let vcs = [vc1, vc2, vc3, vc4]
tabController.viewControllers = vcs.map {UINavigationController(rootViewController: [=10=])}
// Do additional clean up here (i.e. clean cache, UserDefaults, userData objects etc.)
我有一个带有登录 viewController 的应用程序,它以模态方式呈现一个包含多个选项卡的 tabBarController。每个选项卡都有一个 navigationController 和一堆视图。其中一个选项卡用于设置,并有一个注销按钮。
当用户按下注销按钮时,我想关闭所有选项卡和 tabBarController 的所有导航堆栈并返回到初始登录 viewController。本质上我想将应用程序恢复到初始状态。想知道实现此目标的最佳做法是什么。
谢谢
这是我目前在 "Login" 和 "Main UI"
之间移动的应用程序中使用的代码let toViewController = // Login view controller here
let fromView = UIApplication.sharedApplication().keyWindow!.rootViewController!.view
UIApplication.sharedApplication().keyWindow?.rootViewController = toViewController
let toView = toViewController.view
toView.addSubview(fromView)
UIView.animateWithDuration(0.38, delay: 0.2, options: [], animations: {
fromView?.transform = CGAffineTransformMakeTranslation(-UIScreen.mainScreen().bounds.width, 0)
}) { finished in
fromView.removeFromSuperview()
}
如果您想在注销后将所有选项卡和 return 应用重置为初始状态,您只需重置 UITabBarController 的 viewControllers 属性。
因此,如果您是 UITabBarController 的子类,则以下代码应将您的应用程序恢复到其原始状态。
self.viewControllers = @[self.viewControllerOne, self.viewControllerTwo, self.viewControllerThree];
来自文档:
If you change the value of this property at runtime, the tab bar controller removes all of the old view controllers before installing the new ones. The tab bar items for the new view controllers are displayed immediately and are not animated into position.
iOS 11 - Swift 4
以 jstn 对我非常有用的答案为基础。我只映射了 VC 以将它们嵌入到导航控制器中。
let rootViewController = UIApplication.shared.keyWindow?.rootViewController
guard let tabController = rootViewController as? TabController {
return
}
//create all your vcs here
// ...
// ...
let vcs = [vc1, vc2, vc3, vc4]
tabController.viewControllers = vcs.map {UINavigationController(rootViewController: [=10=])}
// Do additional clean up here (i.e. clean cache, UserDefaults, userData objects etc.)