2016-11-09 1 views
1

Я пытаюсь объединить свои пользовательские элементы сенсорной панели вместе с автоматическими текстовыми предложениями на сенсорной панели при редактировании текстового поля.NSTouchBar - как объединить текстовые файлы по умолчанию с настраиваемыми элементами

enter image description here

В настоящее время я переопределение makeTouchBar в пользовательском классе NSTextView, если я не буду делать это, осязание по умолчанию бар у будет создан для TextView.

Это главный makeTouchBar, где я пытаюсь добавить предложения с идентификатором элемента .candidateList, но не повезло:

extension ViewController: NSTouchBarDelegate { 
    override func makeTouchBar() -> NSTouchBar? { 

     let touchBar = NSTouchBar() 

     touchBar.delegate = self 

     touchBar.customizationIdentifier = .myBar 

     touchBar.defaultItemIdentifiers = [.itemId1, 
       .flexibleSpace, 
       .itemId2, 
       .itemId3, 
       .flexibleSpace, 
       .candidateList] 

     touchBar.customizationAllowedItemIdentifiers = [.itemId1] 

     return touchBar 
    } 
} 

Может кто-то обеспечить простой пример того, как добавить слова предложения элемент обычая сенсорная панель?

ответ

1

Простой. Просто позвоните супер в свой собственный класс NSTextView:

override func makeTouchBar() -> NSTouchBar { 
    var touchBar = super.makeTouchBar() 
    touchBar.delegate = self 
    var defaultIdentifiers = [Any](arrayLiteral:touchBar.defaultItemIdentifiers) 
    defaultIdentifiers.insert("CustomLabel", at: 0) 
    touchBar.defaultItemIdentifiers = defaultIdentifiers 
    return touchBar 
} 

override func touchBar(_ touchBar: NSTouchBar, makeItemFor identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem { 
    if (identifier == "CustomLabel") { 
     var button = NSButton(title: "Custom", target: self, action: nil) 
     var item = NSCustomTouchBarItem(identifier: "CustomLabel") 
     item.view = button 
     item.customizationLabel = "Custom" 
     return item 
    } 
    else { 
     return super.touchBar(touchBar, makeItemFor: identifier) 
    } 
    return nil 
} 
+0

большое спасибо! Он работал с получением текстовых полей touch bar от super. но есть несколько строк в вашем ответе, которые мне нужно изменить: touchBar() не может вернуть nil, и мне не пришлось бросать touchBar.defaultItemIdentifiers в [Any]. В любом случае, еще раз спасибо! Вы помогли мне) –

+0

извините мое невежество, но как следует написать это как 'return super.touchBar (touchBar, makeItemFor: identifier)' в объективе-c? – SpaceDog

+0

return [super touchBar: touchBar makeItemForIdentifier: идентификатор]; – rocky

Смежные вопросы