gpt4 book ai didi

objective-c - 如何从 NSWindow 对象创建 NSTouchBar?

转载 作者:行者123 更新时间:2023-12-03 17:09:49 28 4
gpt4 key购买 nike

我正在尝试将触摸栏支持与 SDL 应用程序集成。

我已经研究了 SDL 中的 Objective C 代码,并直接侵入 SDLView 代码并获得了一个可以工作的触摸栏,但现在我想通过库存 SDL2 库获得相同的功能。 SDL公开了它创建的NSWindow对象,我想我可以创建一个实现了makeTouchBar和makeItemForIdentifier的响应者对象,但我不知道如何将它“附加”到窗口。我认为这将是一个“响应者链”,但我真的不知道这意味着什么或如何做到这一点。

我尝试创建以下内容,并在窗口上尝试了 setNextResponder 的几种不同组合,但似乎无法找出调用 makeTouchBar 的正确组合,但我的大致情况是正确的,因为它在以下情况下工作我将这些方法直接放在 View 上。

@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. 如果您可以为窗口提供自定义类,请在 NSWindow 的子类中实现 -makeTouchBar。使用这种方法,您不需要设置或覆盖 touchBar 属性; -makeTouchBar 将被延迟调用以根据需要填充该属性。

  2. 如果您无法使用自己的窗口子类,则只需创建一个 NSTouchBar 对象并将其分配给窗口现有的 touchBar 属性即可。 (基本实现是一个存储的属性,因此无需覆盖它。)

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

如果您确实想将其实现为插入响应程序链的自定义响应程序,您可以执行以下操作:

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

关于objective-c - 如何从 NSWindow 对象创建 NSTouchBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686370/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com