0

私のウィンドウには、Enterと同等のキーを持つように設定されたボタンがウィンドウにありますが、コンテンツビューをIKImageBrowserViewの使用からNSCollectionViewに切り替えた後、keyEquivalentは無視されます。

ドキュメントの内容から:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW10

keyEquivalentイベントは「特別」に処理され、非常に単純である必要があります。

NSCollectionViewItemとアイテムのビューをサブクラス化していますが、そのメソッドをオーバーライドすると、これらのサブクラスのどちらもperformKeyEquivalent:theEventを取得しません。

デフォルトボタンのすぐ隣にキャンセルボタンがあり、esacpeキーにマップされています。キャンセルは引き続き機能しますが、デフォルトのボタンは機能しません。

エンターキーイベントがどこで処理されているかをどのように知ることができますか?

編集:

私は実際に、NSCollectionViewについて学習するために使用したサンプルアプリで同じ問題を見つけました。ウィンドウの下部にデフォルトのボタンを追加しましたが、returnはボタンをトリガーしませんでしたが、Enter(fn + return)はボタンをトリガーしました。

AppleのIconCollectionサンプルアプリ

この例でリターンキーイベントを盗むものについて何かアイデアはありますか?

編集:

ここにサンプルプロジェクトを投稿しました:https ://github.com/watkyn/NSCollectionViewIssue 。デフォルトのボタンが機能しないのはなぜですか?

4

1 に答える 1

3

ReturnEnterは2つの異なるキーです。Return(USキーボードの場合)はアポストロフィキーの右側にあります。Enterキーパッドの右下のキーです。テンキーのないラップトップを使用している場合は、+Enterを押して取得します。fnReturn


サンプルコードが投稿された後に編集する

MyCollectionViewリターン/エンターキーストロークを吸収し、レスポンダーチェーンに渡さない。これをの実装に追加してMyCollectionView戻り、Enterキーを押してボタンを押します。

- (void)keyDown:(NSEvent *)theEvent {
//  NSLog(@"event: %@", theEvent);
    if (36 == theEvent.keyCode || 76 == theEvent.keyCode) {
        //pass return and enter up the responder chain
        [[self window] keyDown:theEvent];
    }
    else {
        //process all other keys in the default manner
        [super keyDown:theEvent];
    }
}

MyControllerViewが実際にreturn/enterで何かを実行する必要がある場合、これは問題を引き起こす可能性があります。その場合、の[super keyDown:theEvent]前に追加できます[[self window] keyDown:theEvent]

于 2011-09-23T16:48:28.987 に答える