4

我有一个NSSplitViewController在其中first viewcontroller显示一个表格的表格,并且second viewcontroller应该根据表格行的选择从一个视图控制器列表中显示一个视图控制器。

在此处输入图像描述

tableViewSelectionDidChange()用来获取选定的行。

现在我有一堆视图控制器(故事板 ID 作为行号给出),我应该添加和second viewcontroller删除NSSplitViewController

我怎样才能做到这一点?

4

2 回答 2

9

你走在正确的道路上。在tableViewSelectionDidChange()你需要使用NSStoryboardsinstantiateController(withIdentifier: String)方法从你的故事板中实例化一个新的 viewController。然后您可以将其设置为您的 splitViews 第二个视图控制器。

然后你需要创建一个splitViewItem. 您可以使用 init 方法,该方法为此 ( NSSplitViewItem(viewController:)) 使用 viewController。

最后,您有两种可能添加新的 viewController。要么使用add/removeSplitViewItem方法,要么直接设置splitViewItems数组。

我在代码中的话:

guard let splitViewController = self.parent as? NSSplitViewController,
      let viewController = self.storyboard?.instantiateController(withIdentifier: "yourIdentifier") as? NSViewController
        else { return }

let item = NSSplitViewItem(viewController: viewController)

// Method one
splitViewController.removeSplitViewItem(splitViewController.splitViewItems[1])
splitViewController.addSplitViewItem(item)

// OR method two
var items = splitViewController.splitViewItems
items[1] = item
splitViewController.splitViewItems = items
于 2017-03-20T06:07:43.283 回答
0

第一种方法的 Objective C 表示。

NSStoryboard * mainStoryboard = [NSStoryboard storyboardWithName:@"Main" bundle:nil];
NSViewController * sourceViewController = [mainStoryboard instantiateControllerWithIdentifier:identrifier];

NSSplitViewItem * item = [NSSplitViewItem splitViewItemWithViewController:sourceViewController];

[self removeSplitViewItem:[self.splitViewItems objectAtIndex:1]];
[self addSplitViewItem:item];
于 2019-07-25T16:17:24.253 回答