2016-11-18 7 views
1

Я пытаюсь интегрировать поддержку тачпада с помощью приложения SDL.Как создать NSTouchBar из объекта NSWindow?

Я пошел в объектный код c SDL и взломал непосредственно в код SDLView и получил рабочую панель, но теперь я хочу получить ту же функциональность с библиотекой SDL2. SDL предоставляет объект NSWindow, который он создает, и я думаю, что я могу создать объект-ответчик с makeTouchBar и makeItemForIdentifier, но я не знаю, как «прикрепить» его к окну. Я думаю, что это будет «цепочка ответчиков», но я не знаю точно, что это значит или как это сделать.

Я попытался создать следующее и попробовал несколько разных комбинаций setNextResponder в окне, но не может показаться, что вы правильно определили комбинацию, чтобы вызвать makeTouchBar, но я нахожусь в правильном шаре, поскольку он работает когда я помещаю эти методы непосредственно в представление.

@interface MyTouchbarResponder : NSResponder 
- (id)init; 

@property(strong, readonly) NSTouchBar *touchBar; 
- (NSTouchBar *)makeTouchBar; 
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier; 


@end 




@implementation MyTouchbarResponder 
- (id)init 
{ 
    [super init]; 
} 

- (NSTouchBar *)makeTouchBar 
{ 
...stuff... 
} 

- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier 
{ 
...stuff... 
} 

@end 

спасибо.

ответ

1

Добавления пользовательского ответчика в цепи является одним из способов сделать это, но есть две простые методы, которые вы можете рассмотреть вопрос о первом:

  1. Если вы можете предоставить собственный класс для окна, реализации -makeTouchBar в подклассе NSWindow. При таком подходе вам не нужно устанавливать или переопределять свойство touchBar; -makeTouchBar будет вызван лениво , чтобы заполнить это имущество по мере необходимости.

  2. Если вы не можете использовать свой собственный подкласс окна, вы можете просто создать объект NSTouchBar и присвоить его существующему touchBar. (Реализация базы хранимая собственности, так что нет никакой необходимости заменить его.)

Эта лень полезна, в том, что вы можете избежать делать дополнительную работу, если устройство не имеет панель сенсорного или запуск симулятора.

Если вы действительно хотите реализовать это в качестве пользовательского ответчика, вставленного в цепочку ответчика, вы могли бы сделать что-то вроде этого:

touchBarResponder.nextResponder = window.nextResponder; 
window.nextResponder = touchBarResponder; 
+0

Спасибо. У меня нет контроля над окнами или классами просмотра. https://github.com/spurious/SDL-mirror/blob/master/src/video/cocoa/SDL_cocoawindow.m#L56 Все, что я получаю, является дескриптором объекта NSWindow. – xaxxon

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