我正在尝试将触摸栏支持与SDL应用程序集成。
我已经进入了SDL中的目标c代码并直接入侵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
谢谢。
答案 0 :(得分:1)
将自定义响应器添加到链中是一种方法,但您可能需要首先考虑两种更简单的方法:
如果您可以为窗口提供自定义类,请在-makeTouchBar
的子类中实现NSWindow
。使用此方法,您无需设置或覆盖touchBar
属性; -makeTouchBar
将被懒惰地✝调用,以根据需要填充该属性。
如果您不能使用自己的窗口子类,则只需创建一个NSTouchBar
对象并将其分配给窗口的现有touchBar
属性。 (基本实现是一个存储属性,因此不需要覆盖它。)
✝这种懒惰很有用,因为如果设备没有Touch Bar或运行模拟器,你可以避免做额外的工作。
如果你真的想将它作为插入响应者链的自定义响应者来实现,你可以这样做:
touchBarResponder.nextResponder = window.nextResponder;
window.nextResponder = touchBarResponder;