我想将图像和新闻从视图控制器传递到tabbar控制器的连接的第一个标签。第一个标签是NewsViewController没有显示新闻标题和图像。 didSelectRowAt indexPath方法如下。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let storybaord=UIStoryboard(name: "Main", bundle: nil)
let tabBar=storybaord.instantiateViewController(withIdentifier: "tabBar") as! UITabBarController
let DVC = tabBar.viewControllers?[0] as! NewsViewController
tabBar.selectedIndex = 0
DVC.getImage=sneakersnews[indexPath.row].image
DVC.getNews=sneakersnews[indexPath.row].news
self.navigationController?.pushViewController(tabBar, animated: true)
}
如何从表格视图中的第一个标签NewsViewController上传递和显示新闻和图像?
您可以从以下链接下载项目:
https://drive.google.com/file/d/1qfI3UaXoUTzOS6Jfe40wj99NAifVkz5Y/view?usp=sharing **
答案 0 :(得分:3)
首先,你正在做两件不同的事情
DiscoveryNewsViewController和tabbarController之间有一个segue
你正在按照这个
推动tabbar控制器let DVC = tabBar.viewControllers?[0] as! NewsViewController
//this is not required as it will always open UIViewController at Zero index so comment this
//tabBar.selectedIndex = 0
let image = sneakersnews[indexPath.row].image
DVC.getImage = image
let news = sneakersnews[indexPath.row].news
DVC.getNews = news
self.navigationController?.pushViewController(tabBar, animated: true)
请阅读上面代码中的注释行
所以你不能一次做两个上面提到的点,因为segue连接已经在推动你的TabBarController和你的self.navigationController?.pushViewController也在推动TabBarController。
解决方案: -
答案 1 :(得分:0)
所以替换
self.navigationController?.pushViewController(tabBar, animated: true)
与
self.present(tabBar, animated: true, completion: nil)
由于您未在UI中刷新指定的图像和标签值,因此无法显示。要做到这一点,只需创建一个函数
func refreshData() { newsTitle.text = getNews NewsImage.image = getImage }
并在
之后立即调用它DVC.getImage=sneakersnews[indexPath.row].image
DVC.getNews=sneakersnews[indexPath.row].news
像这样
DVC.refreshData()
答案 2 :(得分:0)
我看到了你的代码,并得到了问题,并进行了许多测试!
不是一个复杂的问题,但下次需要注意。
这是因为你将一个segue从你的单元格连接到一个TabbarController,当你选中单元格时,由于segue,它会自动转到tabbarController。
然后启动另一个tabbarController并传递数据然后呈现它。你在NewsViewController viewDidLoad中创建了一个断点,可以看到两次点击。
您的代码中还有许多其他问题, 在我看来,你只能使用segue传递数据,使代码稳定和可预测