我正在尝试NSTouchBar
通过插件向我无法修改的应用程序添加对公开按钮的支持。该插件是一个共享库,在创建主窗口后在运行时加载。我创建了一个AppDelegate
如下:
@interface AppDelegate : NSResponder <NSTouchBarDelegate>
@end
使用@implmentation
实现makeTouchBar
andtouchBar
功能的 an:
- (NSTouchBar *) makeTouchBar
- (nullable NSTouchBarItem *) touchBar:(NSTouchBar *)touchBar
makeItemForIdentifier: (NSTouchBarItemIdentifier)identifier
我终于尝试将它注入应用程序,onload
当它加载到应用程序中时,我在动态库中调用的函数中有以下内容。
NSWindow *w = [NSApp mainWindow];
AppDelegate *a = [[AppDelegate alloc] init];
a.nextResponder = w.nextResponder;
w.nextResponder = a;
// Re-setting FirstResponder will trigger AppDelegate::makeTouchBar
// that was attached above.
NSResponder *n = w.firstResponder;
[w makeFirstResponder: nil];
[w makeFirstResponder: n];
但是...AppDelegate::touchBar
永远不会被调用,因此触摸栏永远不会被我的测试按钮填充。
如果我在 Xcode 中创建一个新项目,并使用完全相同的AppDelegate
实现(复制粘贴相同的@interface
和@implementation
),我会得到既显示又响应按下事件的功能按钮,因此注入部分似乎被破坏了。MainMenu.xib
(在 Xcode 中,我猜一切都是通过连接的)
更新: 主要问题是应用程序的编译方式阻止了 TouchBar 工作。也许建立在旧版本的 Mac OS 上。