2016-11-18 5 views
1

私はSDLアプリケーションでタッチバーサポートを統合しようとしています。NSWindowオブジェクトからNSTouchBarを作成する方法は?

私は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 

ありがとうございます。チェーンにカスタムレスポンダを追加

答えて

1

はそれを行うための一つの方法ですが、あなたが最初に考慮する必要があります簡単な2つの方法があります:あなたが実装、あなたの窓のためのカスタムクラスを提供できる場合

  1. は、サブタイプがNSWindowである-makeTouchBar。この方法では、touchBarプロパティを設定または上書きする必要はありません。 -makeTouchBarは遅れて呼び出され、必要に応じてそのプロパティに値を設定します。

  2. 独自のウィンドウサブクラスを使用できない場合は、NSTouchBarオブジェクトを作成し、ウィンドウの既存のtouchBarプロパティに割り当てることができます。 (ベースの実装では、保存されたプロパティですので、それをオーバーライドする必要はありません。)

この怠惰は、デバイスはタッチバーを持っていない場合、その中にあなたが余分な作業を行うことを避けることができ、便利ですまたはシミュレータを実行している。

touchBarResponder.nextResponder = window.nextResponder; 
window.nextResponder = touchBarResponder; 
+0

ありがとう:あなたは本当にレスポンダチェーンに介在カスタムレスポンダとしてこれを実装したい場合は

は、あなたがこのような何かを行うことができます。私はウィンドウやビュークラスを制御できません。 https://github.com/spurious/SDL-mirror/blob/master/src/video/cocoa/SDL_cocoawindow.m#L56私が得るのは、NSWindowオブジェクトのハンドルです。 – xaxxon

関連する問題