上/下矢印キーに応答しないNSTableView

私は上/下矢印キーに応答していないNSTableViewを持っています。私の理解から、デフォルト動作であるので、何が起こっているのか分かりません(注:キーボードコマンドを無効にしていません)。私のテーブルのために私が行う唯一のセットアップは:

[tableView setDoubleAction: @selector(doubleClickedRow)];
[tableView setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[tableView registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]];
[tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal:NO];

しかし、私が言うことから、これらのどれも問題を引き起こさないでしょう。

誰にも私はこの問題の根本をどこで探すことができるかについての提案はありますか?

0
ええ、行をクリックして選択することができます。その後、エラーキーを押すと何も起こりません。私は今夜​​ refusesFirstResponder の値をチェックします。
追加された 著者 Kyle,
nibに設定された refusesFirstResponder の値は何ですか?
追加された 著者 hamstergene,
行をクリックして選択できますか?それは強調表示されますか?私のテーブルビューでは、それが上矢印と下矢印を使用して始めることができるポイントです。
追加された 著者 paulmelnikow,

5 答え

テーブルを含むNSWindowがキーウィンドウでない場合、NSTableViewは矢印キーに対しても反応しません。

NSWindowの "タイトルバー"表示オプションがInterface Builderで設定されていない場合、NSWindowのデフォルト動作を変更してキーステータスを拒否します。 - [NSWindow canBecomeKeyWindow] を参照してください。

したがって、NSWindowがタイトルバーなしでモーダルシートとして表示される場合でも、タイトルバーオプションを設定するか、キーイベントがNSTableViewに届かないようにする必要があります。

2
追加された

どこでも keyDown:をオーバーライドしましたか?カスタム NSTableView サブクラスか、ウィンドウコントローラ内にあるのでしょうか?これは、あなたのテーブルで矢印キーが機能しないホエイの原因になる可能性があります。

カスタムテーブルビューで同じ問題が発生しました。私は矢印キーの super を呼び出して、テーブルがイベントを処理できるようにして解決しました:

@implementation ILCustomTableView

- (void)keyDown:(NSEvent *)theEvent 
{
    if ([theEvent modifierFlags] & NSNumericPadKeyMask)
    {
        [super keyDown:theEvent];   //Let table view handle arrow keys
    } else {

        [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];        
    }
}

- (void)insertNewline:(id)sender
{
   //Enter key. Do special stuff here...
}
@end
1
追加された

ちょうどこの問題に遭遇し、私はこの行が上下の矢印キーが行を正しく選択できないことを発見しました。

[self.tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

自分の背景色を使用しようとしていたので追加しました。私が上/下をタップすると、 shouldSelectRow:が起動しましたが、常に0でした!上の行をコメントアウトすると、私のためにそれを修正しました。

0
追加された

上/下矢印キーに応答していないNSTableViewがあります。   私の理解から、これはデフォルトの動作です。

これはデフォルト動作ではありません。 NSTableViewはキーボードイベントを処理し、カーソルキーでのナビゲーションを可能にします。

Maybe you can debug the responder chain with the trick in the following question: How to inspect the responder chain?

0
追加された
私が質問を正しく理解すると、ZenoxはNSTableViewがキーボードイベントを処理しないと仮定します。この仮定は間違っています。 NSTableViewのデフォルトの実装は、キーボードナビゲーションを提供します。
追加された 著者 Thomas Zoechling,
ハァッ? "これはデフォルト動作ではありません" "NSTableViewはキーボードイベントを処理します"と矛盾するようです。
追加された 著者 paulmelnikow,

私は同じ問題を抱えていました。矢印キーを使って、私のtableviewの代理人は変更を通知されませんでした。

これは私の迅速な解決策でした:

最初にNSTableViewをサブクラス化し、このメソッドをオーバーライドします。

override func keyDown(theEvent: NSEvent) {
    super.keyDown(theEvent)
    let code=theEvent.keyCode
    if code >= 123 && theEvent.keyCode <= 126 {
        if let target=target{
            target.performSelector(action)
        }
    }
}

123〜126のコードはそれぞれ左、右、下、上になります

0
追加された