Swift中如何将TableView数据传递给TabBarController的首个子控制器?
解决TabBarController嵌入后的数据传递问题
嘿,这个场景我太熟悉了!当你给EventViewController套上TabBarController之后,原来的segue目标就变了——现在segue.destination不再是直接的EventViewController,而是你新嵌入的TabBarController,所以之前的代码自然就失效啦。
你只需要调整一下prepare(for:sender:)方法,先拿到TabBarController,再从它的子控制器列表里找到第一个标签页的EventViewController,然后再传递数据就行。而且建议你尽量避免强制解包(比如原来的!),换成可选绑定更安全,防止崩溃。
修改后的代码如下:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // 先确认跳转目标是UITabBarController if let tabBarController = segue.destination as? UITabBarController { // 从TabBar的子控制器数组中取出第一个,强转为EventViewController if let eventVC = tabBarController.viewControllers?.first as? EventViewController { // 安全获取选中的行索引,避免强制解包导致崩溃 if let selectedRow = tableView.indexPathForSelectedRow?.row { eventVC.Event = events[selectedRow] } } } }
关键点说明:
- 首先把
segue.destination强转为UITabBarController,这是现在的跳转目标 UITabBarController有个viewControllers数组,里面按顺序存放着各个标签页对应的控制器,我们取第一个元素- 最后把这个元素强转为你的
EventViewController,再赋值数据就搞定了
另外别忘了检查一下Storyboard里的配置:确保TabBarController的第一个标签页确实是你要传数据的EventViewController,不然强转还是会失败哦~
内容的提问来源于stack exchange,提问作者Jørgen Lindalen
相关产品推荐
相关产品推荐

