NSTouchBar
他の方法では変更できないアプリケーションに、プラグインを介してボタンを公開するためのサポートを追加しようとしています。共有ライブラリであるプラグインは、メイン ウィンドウが作成された後、実行時に読み込まれます。私はAppDelegate
次のように作成しました:
@interface AppDelegate : NSResponder <NSTouchBarDelegate>
@end
and関数@implmentation
を実装する を使用すると、次のようになります。makeTouchBar
touchBar
- (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
をコピーして貼り付ける) を使用すると、表示され、プレス イベントに応答する機能ボタンが表示されるため、壊れているように見えるのはインジェクション部分です。(Xcodeでは、すべてが接続されていると思います)@interface
@implementation
MainMenu.xib
更新: 主な問題は、TouchBar が機能しないようにアプリケーションがコンパイルされたことです。おそらく古いバージョンの Mac OS 上に構築されています。