如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?

Posted

技术标签:

【中文标题】如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?【英文标题】:How to open view tabbar controller from didSelectRowAt indexPath within storyboard in swift? 【发布时间】:2018-06-03 19:03:23 【问题描述】:

我有一个带有 tabbarcontroller 的故事板。其中一个选项卡栏有一个表格视图,我希望当用户从表格视图中连续点击时打开另一个选项卡栏的详细信息视图。 问题是当我打开详细视图标签栏隐藏时。如何在 didselectrowatindexpath 上显示标签栏?

didselectrowatindexpath 中的代码:

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        let storybaord=UIStoryboard(name: "Main", bundle: nil)
        let DVC=storybaord.instantiateViewController(withIdentifier: "NewsViewController") as! NewsViewController
        DVC.getImage=sneaker[indexPath.row]
        DVC.getNews=News[indexPath.row]
        self.navigationController?.pushViewController(DVC, animated: true)

    

我创建了单视图应用程序。我创建了 DiscoveryNewsTableViewCell。我用两个数组 1-sneaker 2- News 数组填充了表格视图单元格。我想要当特定数组显示 bar 控制器的 ist 选项卡时。但我确实得到了这些标签栏控制器第一个标签上的字段。这是此https://drive.google.com/file/d/1uSYl-4a1UQXpMXkSQ_l8aij6EH_v2yna/view?usp=sharing的示例代码

【问题讨论】:

DetailView 在另一个标签栏中?你的意思是,我们必须打开另一个tabBarviewController,其中一个viewController 是detailView。我说的对吗? 【参考方案1】:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
// setting these values in local storage using user defaults
    let currentObj = News[indexPath.row]
    UserDefaults.standard.set(currentObj, forKey: "currentOb")
    let storybaord=UIStoryboard(name: "Main", bundle: nil)
    let DVC=storybaord.instantiateViewController(withIdentifier: "NewsViewController") as! NewsViewController
    self.navigationController?.pushViewController(DVC, animated: true)
    

【讨论】:

什么是 forKey:“currentOb”? @ajadka.. 您想设置一些值并需要发送目标 VC,所以在这里您需要设置该值并在目标 Vc 处检索该值【参考方案2】:

这是因为您推送的是 viewController 而不是 TabBarController。

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=sneaker[indexPath.row]
    DVC.getNews=News[indexPath.row]
    self.navigationController?.pushViewController(tabBar, animated: true)


在上面的代码中替换0

  tabBar.viewControllers[0]
  tabBar.selectedIndex = 0

带有要打开的视图控制器的索引。

而且还在排队

   let tabBar=storybaord.instantiateViewController(withIdentifier: "tabBar") as! UITabBarController

tabBar 必须设置为要显示的 UITabBarController 的故事板标识符,如下所示。

【讨论】:

在选择行时程序陷入异常。Storyboard 不包含标识符为“tabBar”的视图控制器。 只有我在我的图像中显示。转到情节提要选择要显示的 uitabBarController,然后将情节提要 ID 设置为 tabBar 收到了吗? 我已经编辑了。请下载代码并解决问题 @ajadka 解决了下载代码并检查。 drive.google.com/open?id=1k3X2AtmJRToiu3E1m-rJR93mfPjy7cMc

以上是关于如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在情节提要中从一个视图转到另一个视图

Swift如何引用不在情节提要的* .xcassets文件夹中的图像文件

在 ios 中从 xib 移动到情节提要

如何使用 Swift 中的自动生成键从情节提要中设置的 UITextView 中检索文本?

如何在 swift UI 中单击按钮时从 swift UI 导航到情节提要?

在 XCTest 测试中从情节提要加载的视图控制器中清空 UIView 快照(间歇性)