2016-11-08 9 views
3

У меня есть окно NSPopover, в которое я хотел бы добавить поддержку тачпада. Мне удалось реализовать поддержку тачпада для стандартного NSWindow, но в соответствии с той же процедурой для моего popover не возникает никаких элементов тачпада, отображаемых в симуляторе сенсорной панели xCode.Окна с сенсорной панелью и NSPopover

Я реализую makeTouchbar и NSTouchBarDelegate в NSViewController, который представлен как NSPopover. makeTouchBar и вызываются функции делегата, но ничего не отображается на сенсорной панели (в приведенном ниже коде блоки блокируются как сенсорная панель, так и подсказка).

Я волнуюсь, что окна 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

Спасибо, но я считаю, что это более обходное решение, так как преобразование в лист - это совершенно другая модель UX. – RealCasually

+0

Действительно, но это может помочь другим людям. Поскольку идея работает, она не заслуживает нисходящего ... – vomi

1

Просмотрите NSTouchBar Catalog Sample от Apple. В последней версии есть пример для вашего варианта использования. Это называется Окно фона (вы должны показать его через окно Окно Меню в встроенном приложении).

enter image description here

Они загружаются в BackgroundImagesViewController с Segue NSPopover в раскадровке и создание 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.

+0

подумайте над добавлением соответствующей информации к вашему ответу. Ссылки могут быть разорваны/удалены владельцами сайтов – pedrorijo91

+0

Извините, я не могу дать слишком много полезных технических деталей здесь. Я просто хотел поделиться ссылкой с образцом. – alexkaessner

+0

Я не думаю, что вы говорите об одном и том же. Язык Popover in Touch Bar - это тип управления, но основной вопрос заключается в том, чтобы показать настраиваемый сенсорный план для NSPopover, и я также не смог получить эту работу. – RealCasually