首页 > 解决方案 > 在 window!.rootViewController 前面添加一个 UITabBarController Swift 4 类型的 ViewController

问题描述

我继承了一个直接启动到 UITabBarController 的故事板。在 didFinishLaunchingWithOptions 方法的 AppDelegate.swift 文件中,有以下代码:

//let loginScreen = window!.rootViewController
let tabController = window!.rootViewController as! UITabBarController
let navController = tabController.viewControllers![0] as! UINavigationController
let salaryController = navController.topViewController as! SalaryTableViewController
let nav2Controller = tabController.viewControllers![1] as! UINavigationController
let employeeController = nav2Controller.topViewController as! EmployeeTableViewController

我正在尝试更改代码,以便登录屏幕是 rootViewController 但是当我从 tabController 分配中删除 rootViewController 时,我收到一个错误,将 UITableViewController 转换为 UITabBarController 总是失败。有谁知道为什么将 UITableViewController 转换为 UITabBarController 总是失败,除非 UITableViewController 是 rootViewController?有没有办法在不更改 rootViewController 分配的情况下将启动屏幕更改为不同的控制器?这是视觉的故事板: 在此处输入图像描述

标签: iosswift4xcode9xcode-storyboardrootviewcontroller

解决方案


UITabBarController 是 UIViewController 的子类。您不能将超类转换为子类。(反之亦然)为了实现您的想法,您应该从情节提要中删除初始化根视图控制器并以编程方式进行。因为现在,Xcode 认为您的初始视图控制器是 UITabBarController,唯一的方法是您以编程方式实例化您的类,然后使其成为根视图控制器。


推荐阅读