Как создать NSTouchBar из объекта NSWindow?
Я пытаюсь интегрировать поддержку сенсорной панели с приложением SDL.
Я вошел в объективный код 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 ответ
Добавление пользовательского ответчика в цепочку - это один из способов сделать это, но есть два простых способа, которые вы могли бы рассмотреть в первую очередь:
Если вы можете предоставить собственный класс для своего окна, реализуйте
-makeTouchBar
в подклассеNSWindow
, При таком подходе вам не нужно устанавливать или переопределятьtouchBar
имущество;-makeTouchBar
будет вызываться лениво, чтобы заполнить это свойство по мере необходимости.Если вы не можете использовать свой собственный подкласс окна, вы можете просто создать
NSTouchBar
объект и назначить его существующему окнуtouchBar
имущество. (Базовая реализация является хранимым свойством, поэтому нет необходимости переопределять его.)
✝ Эта лень полезна тем, что вы можете избежать дополнительной работы, если на устройстве нет сенсорной панели или запущенного симулятора.
Если вы действительно хотите реализовать это как собственный респондент, вставленный в цепочку респондента, вы можете сделать что-то вроде этого:
touchBarResponder.nextResponder = window.nextResponder;
window.nextResponder = touchBarResponder;