【问题标题】:How to reset root view controller如何重置根视图控制器
【发布时间】:2017-07-25 12:27:20
【问题描述】:

是否可以重置根视图控制器?重置是指将其重置为初始状态,以便再次调用viewDidLoad。我正在使用UITabBarController,当我注销时,我希望卸载之前加载的所有选项卡。

【问题讨论】:

  • 创建新实例并设置为根视图控制器可能会有所帮助
  • 为什么不使用viewWillAppear来重置状态?
  • 我的问题怎么是重复的@himanth?我问的是如何重置根视图控制器,而不是如何以及何时调用 viewDidLoad
  • @DanielTovesson 兄弟别慌,其他人会根据你的内容理解你的任务,或者可能会被一些人误解。

标签: ios swift


【解决方案1】:

您可以通过在注销操作时将 TabBarController 的实例设置为 rootViewController 来做到这一点。

斯威夫特 3:

let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = storyBoard.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
UIApplication.shared.keyWindow?.rootViewController = tabBarController
UIApplication.shared.keyWindow?.makeKeyAndVisible()

目标 C:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabBarController = [storyBoard instantiateViewControllerWithIdentifier:@"TabBarController"];
[[[UIApplication sharedApplication] keyWindow] setRootViewController:tabBarController];
[[[UIApplication sharedApplication] keyWindow] makeKeyAndVisible];

【讨论】:

  • key 窗口现在在 ios 13 中已被弃用。请为此提供最新的解决方案。
【解决方案2】:

如果您在 Tabbarcontroller 上使用导航控制器,则导航到该导航控制器,否则转到 Tabbarcontroller as-

 let appDelegate = UIApplication.shared.delegate as! AppDelegate
 let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
 let tabBar = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! TabBarController
 appDelegate.window?.rootViewController = tabBar
 appDelegate.window?.makeKeyAndVisible()

【讨论】:

    【解决方案3】:

    UIViewControllerview属性设置为nil

    UIApplication.shared.keyWindow?.rootViewController?.view = nil
    

    它将强制UIViewController 在下次调用self.view 后从头开始初始化他的生命周期

    【讨论】:

      猜你喜欢
      • 2015-02-09
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多