ios - 将导航 Controller 嵌入到选项卡栏 Controller 中

标签 ios iphone swift uitabbarcontroller

我目前有一个从ViewController分离出来的DetailViewController,它嵌入在UINavigationViewController中,我想将其嵌入 >UITabBarController。当我第一次在 storyboard 上执行此操作时,我的应用程序崩溃并出现错误:

"Could not cast value of type 'UITabBarController' (0x10badf258) to 'UINavigationController' (0x10badf208)".

经过研究,我添加了前两行(let tabVc =,并let navVc =),但仍然崩溃。为了创建一个成功的 TabBarController,我缺少什么?

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let tabVc = segue.destinationViewController as! UITabBarController
    let navVc = tabVc.viewControllers!.first as! UINavigationController

    if segue.identifier == "ShowItem" {
        if let row = tableView.indexPathForSelectedRow?.row {
            let item = itemStore.allItems[row]
            let detailViewController = segue.destinationViewController as! DetailViewController
            detailViewController.item = item
            detailViewController.imageStore = imageStore
        }
    }
}

Storyboard

更新:应用更改后,我的错误已更改为

"Could not cast value of type 'UITabBarController' (0x103ff6258) to 'Photomania.ItemsViewController' (0x1029520d0)."

Error

最佳答案

我认为您处理问题的方式是错误的。您可以在其viewDidLoad中设置ItemsViewControllerimageStoreitemStore

override func viewDidLoad() {
    super.viewDidLoad()
    self.itemStore  = ItemStore()
    self.imageStore = ImageStore()
}

但是,如果您希望在 AppDelegatedidFinishLaunchingWithOptions 中执行此操作,那么您可以这样做。

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

    let rootController = window?.rootViewController

    if rootController is UITabBarController {
        let firstTabItem = (rootController as! UITabBarController).viewControllers?[0]

        if firstTabItem is UINavigationController {

            let firstController = (firstTabItem as! UINavigationController).viewControllers.first as! ItemsViewController
            firstController.itemStore  = ItemStore()
            firstController.imageStore = ImageStore()
        }
    }
}

关于ios - 将导航 Controller 嵌入到选项卡栏 Controller 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368203/

相关文章:

ios - 在 Swift 中带有 header 的 URLRequest

ios - GCDWebServer 支持 websocket 吗?

iphone - 我可以在不使用MDM的情况下在iOS Developer Enterprise Program上使用APNS吗

ios - 创建可拖动的引脚注释,但应该阻止它在按钮上拖动

iphone - 如何在我的 iPhone 应用程序中使用日历?

swift - 在 MKMapView 上更新用户位置的图像

ios - 无法将符合协议(protocol)的值设置为具有协议(protocol)类型的属性

iphone - UIActionSheet 中的奇怪颜色

iphone - 当用户点击 "sign out button"时如何重置 iOS 应用程序?

ios Instagram api POST 关系端点使用 Alamofire - 错误