我想使用 NSTabViewController 在 6 个具有工具栏样式的不同选项卡之间切换。
所有选项卡的共同点是它们显示客户实体的不同方面。
现在我想将附加的 NSToolbarItems 添加到 NSTabViewController 的工具栏中?但是我还没有找到访问工具栏的方法。我还想在工具栏项之间添加空格。
有没有办法这样做?
或者如何在不使用 NSTabViewController 的情况下将 ViewController 从情节提要添加到 NSTabView?
问候
奥利弗
与此同时,我尝试了另一种我认为更有前途但会导致另一种奇怪行为的方法:
我创建了一个新的NSViewController,并在里面放了一个NSTabView。为了加载我已经存在的视图控制器,我使用了这个
override func viewDidLoad() {
super.viewDidLoad()
let customerController = self.storyboard?.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("CustomerVCID")) as! CustomerViewController
let servicesController = self.storyboard?.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("ServicesVCID")) as! ServicesController
customerController.customer = self.customer
servicesController.customer = self.customer
self.tabView.tabViewItems[0].view = customerController.view
self.tabView.tabViewItems[1].view = servicesController.view
}
这确实有效,但是现在我所有有操作的NSButtons都会导致我的应用程序崩溃。
每个窗口只有一个工具栏。所以你的NSTabViewController
分享它。
- 选择
NSTabViewController
工具栏模式 - 覆盖
NSWindowController
并添加项目
例:
override func windowDidLoad() {
super.windowDidLoad()
window?.toolbar?.insertItem(withItemIdentifier: .print, at: 0)
}
您始终可以通过以下路径视图>窗口>工具栏访问工具栏
您唯一的问题是每NSToolbar
有一个delegate
。这意味着您必须在委托NSTabViewController
内创建自定义NSToolbarItem
。
override func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
if itemIdentifier == .export {
return ExportToolbarItem.new()
} else {
return super.toolbar(toolbar, itemForItemIdentifier: itemIdentifier, willBeInsertedIntoToolbar: flag)
}
}
请记住,您需要致电超级。这是因为基础方法想要创建与视图控制器的绑定。如果您需要工具栏中的可操作按钮,只需添加它们而无需调用 super。