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

时间:2017-03-20 04:55:14

标签: swift macos cocoa nssplitviewcontroller

我有一个first viewcontroller,其中second viewcontroller显示一个表格,tableViewSelectionDidChange()应该根据表格行的选择从一个viewcontrollers列表中显示一个viewcontroller。

more general form

我使用second viewcontroller来获取所选行。

现在我有一堆viewcontrollers(故事板ID作为行号),我应该添加到NSSplitViewController中的body { background-color: black; margin: 0 0 0 0; } #main-nav { height: 37px; width: 100%; overflow: hidden; background-color: blue; margin: 0 0 0 0; } #main-content { height: 100px; width: 100%; background-color: red; margin: 0 0 0 0; } p { color: lime; margin:0 }

}

我该怎么做?

2 个答案:

答案 0 :(得分:6)

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

然后你需要创建一个splitViewItem。您可以使用带有viewController的init方法(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

答案 1 :(得分:0)

第一种方法的客观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];