0

タブバー ビューを NSControl サブクラスとして実装しました。

ここに画像の説明を入力

クリックすると、AppKit がfirstResponderNSWindow の更新を試みます。firstResponderタブバーが(acceptsFirstResponder戻る)になりたくないのでNO、NSWindow 自体がfirstResponder. 私のレスポンダー チェーンはウィンドウとそのコントローラーで構成され、アクション メッセージはタブバーの下のサブビュー (NSOutlineView) に配信されません。タブバーをクリックしたときに、NSOutlineView がアクション メッセージとイベントを受信し続けるようにしたいと思います。

これを行う適切な方法は何ですか?firstResponderクリックされたときに NSView が変更を試みるのを止める方法はありませんか?

nextResponderツールバーを NSOutlineView に設定することを考えましたnextResponderが、NSView を手動で変更することは Apple によって推奨されていません。

4

1 に答える 1

0

firstResponderタブバーのデリゲート メソッドの実装で、アウトライン ビューに手動でリセットすることになりました。

私が思いついた別の解決策はfirstResponder、タブバーがfirstResponder.

- (void)awakeFromNib {
    [self.window addObserver:self
                  forKeyPath:@"firstResponder"
                     options:NSKeyValueObservingOptionOld
                     context:nil];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
                        change:(NSDictionary *)change context:(void *)context {
    NSResponder *oldResponder = [change objectForKey:NSKeyValueChangeOldKey];
    if (self.window.firstResponder == self) {
        [self.window makeFirstResponder:oldResponder];
    }
}
于 2012-05-22T19:00:49.970 に答える