我有一个 NSPopover
窗口,我想向其中添加触摸栏支持。我已经成功实现了对标准 NSWindow
的触摸栏支持,但是对我的弹出框执行相同的过程不会导致任何触摸栏项目出现在 xCode 触摸栏模拟器中。
我正在 NSViewController
中实现 makeTouchbar
和 NSTouchBarDelegate
,它以 NSPopover
的形式呈现。 makeTouchBar
和委托(delegate)函数正在被调用,但触摸栏中没有显示任何内容(在下面的代码块中,触摸栏和提示都在记录)。
我担心 NSPopover 窗口不会触发触摸栏作为事件应用程序,即使它具有键盘焦点。如何显示 NSPopover
窗口的触摸栏项目?
//MARK: Touch bar
@available(OSX 10.12.1, *)
override func makeTouchBar() -> NSTouchBar? {
Swift.print("Touchbar.")
let touchBar = NSTouchBar()
touchBar.delegate = self
touchBar.customizationIdentifier = .touchBar
touchBar.defaultItemIdentifiers = [.tbHint, .colourC]
return touchBar
}
@available(OSX 10.12.1, *)
extension RememberViewController: NSTouchBarDelegate {
func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {
switch identifier{
case NSTouchBarItemIdentifier .tbHint:
Swift.print("hint")
let buttonView = NSCustomTouchBarItem(identifier: identifier)
let button = NSButton(title: "Hint", target: self, action: #selector(showHint))
buttonView.view = button
return buttonView
case NSTouchBarItemIdentifier .colourC:
let colorPicker: NSColorPickerTouchBarItem
colorPicker = NSColorPickerTouchBarItem.colorPicker(withIdentifier: identifier)
colorPicker.customizationLabel = "Color Picker"
colorPicker.target = self
colorPicker.action = #selector(showHint)
return colorPicker
default:
return nil
}
}
}
最佳答案
查看 NSTouchBar Catalog Sample来自苹果。最新版本有一个完全适合您的用例的示例。它称为背景窗口(您必须通过构建的应用程序中的窗口菜单显示它)。
他们正在 Storyboard中加载带有 NSPopover segue 的 BackgroundImagesViewController
并创建 NSTouchBar,如下所示:
@available(OSX 10.12.2, *)
class BackgroundImagesViewController: NSViewController {
override func makeTouchBar() -> NSTouchBar? {
let touchBar = NSTouchBar()
touchBar.delegate = self
touchBar.customizationIdentifier = .scrubberBar
touchBar.defaultItemIdentifiers = [.imageScrubber]
touchBar.customizationAllowedItemIdentifiers = [.imageScrubber]
touchBar.principalItemIdentifier = .imageScrubber
return touchBar
}
}
最好的办法是查看 Apple 的示例文件。
关于macos - Touchbar 和 NSPoover 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493349/