Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从NSWindow对象创建NSTouchBar?_Objective C_Cocoa_Sdl_Nstouchbar - Fatal编程技术网

Objective c 如何从NSWindow对象创建NSTouchBar?

Objective c 如何从NSWindow对象创建NSTouchBar?,objective-c,cocoa,sdl,nstouchbar,Objective C,Cocoa,Sdl,Nstouchbar,我正在尝试将touchbar支持与SDL应用程序集成 我已经研究了SDL中的objective c代码,并直接侵入了SDLView代码,获得了一个可用的触摸栏,但现在我想获得与股票SDL2库相同的功能。SDL公开了它创建的NSWindow对象,我想我可以创建一个响应器对象,实现了makeTouchBar和makeItemForIdentifier,但我不知道如何将它“附加”到窗口。我认为这将是一个“响应链”,但我真的不知道这到底意味着什么或如何做到这一点 我尝试过创建以下内容,并在窗口上尝试了s

我正在尝试将touchbar支持与SDL应用程序集成

我已经研究了SDL中的objective 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

谢谢。

将自定义响应器添加到链中是一种方法,但有两种更简单的方法,您可能首先要考虑:

  • 如果可以为窗口提供自定义类,请在
    NSWindow
    的子类中实现
    -makeTouchBar
    。使用这种方法,您不需要设置或覆盖
    触摸栏
    属性<代码>-makeTouchBar将被延迟调用✝ 根据需要填充该属性

  • 如果无法使用自己的窗口子类,则只需创建一个
    NSTouchBar
    对象,并将其分配给窗口现有的
    touchBar
    属性。(基本实现是一个存储属性,因此不需要重写它。)

  • ✝ 这种惰性很有用,因为如果设备没有触摸栏或运行模拟器,您可以避免做额外的工作

    如果您确实希望将其实现为插入到响应器链中的自定义响应器,您可以执行以下操作:

    touchBarResponder.nextResponder = window.nextResponder;
    window.nextResponder = touchBarResponder;
    

    谢谢我无法控制窗口或视图类。我得到的只是NSWindow对象的句柄。