2016-11-08 41 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