UINavigationController、UITabBarController、UITableViewController

UINavigationController, UITabBarController, UITableViewController

我目前在应用程序中设置了一个 UINavigationController 作为初始视图,它有一个 UITableViewController 作为它的根视图控制器。到目前为止,该应用程序运行良好。我在 AppDelegate.swift 中有以下代码:

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let favLibrary = FavLibrary()

    let navController = window!.rootViewController as! UINavigationController
    let favController = navController.topViewController as! FLViewController
    favController.favLibrary = favLibrary

    return true
}

我正在尝试实现一个 UITabBarController,以便我可以使用选项卡栏在同一级别(收藏夹和库)的两个 UITableViewController 之间切换。

我将每个 VC 嵌入到它自己的导航控制器中,然后我将这两个导航控制器嵌入到一个标签栏控制器中。

应用程序 运行 崩溃并出现以下错误:

无法将类型 'UITabBarController' (0x115f9e430) 的值转换为 'UINavigationController' (0x115f971d0)。 2018-09-27 15:49:43.811377-0700 appName [3675:954448] 无法将类型 'UITabBarController' (0x115f9e430) 的值转换为 'UINavigationController' (0x115f971d0).

如何更正 AppDelegate 中的代码以保留新排列的选项卡栏和导航控制器的功能?

如果我对你的问题理解正确,我想你应该首先访问 tabBarController,然后检索它包含的视图控制器,它应该是一个导航控制器列表。然后你可以在选定的导航控制器中获取你的视图控制器:

let tabBar = window!.rootViewController as! UITabBarController
let targetTabNav = tabBar.viewControllers![1] as! UINavigationController // change index to what you want
let targetVc = targetTabNav.viewControllers.first!
// Do what you want with the target Vc ...