我目前有一个从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
}
}
}
更新:应用更改后,我的错误已更改为
"Could not cast value of type 'UITabBarController' (0x103ff6258) to 'Photomania.ItemsViewController' (0x1029520d0)."
最佳答案
我认为您处理问题的方式是错误的。您可以在其viewDidLoad
中设置ItemsViewController
的imageStore
和itemStore
。
override func viewDidLoad() {
super.viewDidLoad()
self.itemStore = ItemStore()
self.imageStore = ImageStore()
}
但是,如果您希望在 AppDelegate
的 didFinishLaunchingWithOptions
中执行此操作,那么您可以这样做。
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/