如何将值从 NSTabViewController 传递给子视图?

Posted

技术标签:

【中文标题】如何将值从 NSTabViewController 传递给子视图?【英文标题】:How to pass value from NSTabViewController to child view? 【发布时间】:2014-10-27 18:44:58 【问题描述】:

我想在我的 Mac 桌面应用程序中有选项卡菜单,每个选项卡都会显示进度条(从互联网加载内容),然后加载数据。我想在每个页面中使用相同的 LoadingViewController 并且只传递应该下载的数据(根据选项卡用户选择)。如何将信息从 NSTabViewController 传递给子 ViewController? 这就是我的故事板的样子:

【问题讨论】:

【参考方案1】:

在情节提要的“文档大纲”窗格(左侧列出视图、对象等的可折叠窗格)中,选项卡视图控制器下将有两个标记为“选项卡视图项”的对象。给他们每个人一个标识符。 (在下面的示例中,它们是“entriesTabItem”和“contactsTabItem”。

然后,子类 TabViewController,并在该子类中,在“viewDidLoad”中添加如下内容:

override func viewDidLoad() 
    super.viewDidLoad()

    var entryIndex = self.tabView.indexOfTabViewItemWithIdentifier("entriesTabItem")
    var entriesTVItem:NSTabViewItem = self.tabViewItems[entryIndex] as NSTabViewItem
    var entriesVC:EntryViewController? = entriesTVItem.viewController as EntryViewController?
    if (entriesVC != nil)
    entriesVC!.topTabView = self.tabView
        entriesVC!.topTabVC = self

    

    var contactIndex = self.tabView.indexOfTabViewItemWithIdentifier("contactsTabItem")
    var contactTVItem:NSTabViewItem = self.tabViewItems[contactIndex] as NSTabViewItem
    var contactVC:ContactsViewController? = contactTVItem.viewController as ContactsViewController?
    if(contactVC != nil) 
        contactVC!.topTabView = self.tabView
        contactVC!.topTabVC = self

    


在上面的代码中,视图控制器可以是同一个类而不是不同的类,你可以传递任何你想要的变量。

上周我不得不这样做,这让我发疯了!

【讨论】:

换句话说,我必须继承 Tab View 并添加一些额外的代码? 不是tabView,而是TabViewController,不一样。 tabView 是 TabViewController 的子项。关键是你通过 TabViewController 的 tabViewItems 访问视图控制器。使用这些,您可以在视图控制器上设置任何变量。 这仅适用于加载选项卡视图控制器时加载的项目。从文献中 标签视图控制器延迟加载与每个子视图控制器关联的视图,只有在选择了相应的标签后才创建它们。首次显示选项卡视图控制器的视图时,只加载最初选择的选项卡的视图。 --- 也许最好在应该加载项目的 tabItem(:didSelect) 中做这些事情。

以上是关于如何将值从 NSTabViewController 传递给子视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从angularjs传递给节点[重复]

Java:如何将值从类/bean传递给servlet

如何将值从组件传递给道具并设置状态

Laravel:如何将值从控制器发送到模型?

如何将值从 tableview 传递到 collectionview

如何将值从 NavigationController 推送到 rootViewController?