macos - Touchbar 和 NSPoover 窗口

标签 macos cocoa nspopover nstouchbar

我有一个 NSPopover 窗口,我想向其中添加触摸栏支持。我已经成功实现了对标准 NSWindow 的触摸栏支持,但是对我的弹出框执行相同的过程不会导致任何触摸栏项目出现在 xCode 触摸栏模拟器中。

我正在 NSViewController 中实现 makeTouchbarNSTouchBarDelegate,它以 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来自苹果。最新版本有一个完全适合您的用例的示例。它称为背景窗口(您必须通过构建的应用程序中的窗口菜单显示它)。

enter image description here

他们正在 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/

相关文章:

apache-flex - 我可以将 Flex Builder 3 与 Mac OS X 10.7 Lion 一起使用吗?

macos - go version 命令显示更新到 1.8 后的旧版本号

iphone - Objective-C内存管理: caching view elements

swift - NSPopover 中的 NSTableview 看起来与独立的不同

objective-c - 鼠标悬停时的 NSPopOver

objective-c - 如何在 Objective-C 中自定义绘制窗口标题栏?

objective-c - wifi 连接时的通知 (OS X)

macos - NSPopOver 和 NSViewController - 拖动以调整大小

objective-c - cocoa : Multiline NSTextFieldCell in a NSOutlineView

javascript - 两种 AES 算法之间的互操作性