2016-11-08 99 views
3

我有一个NSPopover窗口,我想添加touchbar支持。我设法实现了标准NSWindow的触摸板支持,但按照相同的步骤为我的弹出窗口不会导致出现在xCode touchbar模拟器中的任何触摸栏项目。Touchbar和NSPopover窗口

我正在执行makeTouchbarNSTouchBarDelegate中的NSViewController,它被表示为NSPopovermakeTouchBar和委托函数正在调用,但触摸条中没有显示任何内容(在下面的代码块中,Touchbar和提示都正在记录)。

我担心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 
     } 


    } 
} 

回答

-1

我成功设法为弹出视图设置了一个触摸栏。 唯一的区别是我不会将它作为NSPopover呈现,而是作为工作表呈现。

self.presentViewControllerAsSheet(self.popupViewController) 

还验证两次,新控制器视图具有显示触摸条的焦点。

+0

谢谢,但我认为这更多的解决方法转换为工作表是一个完全不同的用户体验模型。 – RealCasually

+0

的确,但这可以帮助其他人。由于这个想法有效,它不值得downvote ... – vomi

1

查看Apple的NSTouchBar Catalog Sample。最新的修订版有一个恰好您的使用案例。它被称为背景窗口(您必须通过构建应用程序中的窗口菜单显示它)。

enter image description here

它们装载在故事板一NSPopover赛格瑞一个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 
    } 
} 

的最好的事情是检查出从苹果的示例文件。

+0

考虑将相关信息添加到您的答案。链接可能被网站所有者破坏/删除 – pedrorijo91

+0

对不起,我不能在这里提供太多有用的技术细节。我只是想分享一下Sample的链接。 – alexkaessner

+0

我不认为你在谈论同样的事情。 Touch Bar中的Popover语句是一种控制类型,但基本问题是显示NSPopover的自定义触摸栏,而且我也无法使其工作。 – RealCasually