更新 NSSplitViewController 中的第二个视图控制器

Update second view controller in NSSplitViewController

我有一个 NSSplitViewController,其中 first viewcontroller 显示 table,second viewcontroller 应该显示 viewcontroller 列表中的 viewcontroller s 基于 table 行的选择。

我正在使用 tableViewSelectionDidChange() 获取选定的行。

现在我有一堆 viewcontrollers(以行号给出的情节提要 ID)我应该添加和删除到 NSSplitViewController

中的 second viewcontroller

我该怎么做?

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

然后你需要创建一个splitViewItem。您可以使用 init 方法,它为此使用 viewController (NSSplitViewItem(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

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];