macOS上的Objective-C-获取按键:用于Shift+;NSView中的选项卡

macOS上的Objective-C-获取按键:用于Shift+;NSView中的选项卡,objective-c,macos,cocoa,keyboard,Objective C,Macos,Cocoa,Keyboard,我有一个通过keyDown处理击键的应用程序 到目前为止,除了两个问题(稍后我将发布/询问另一个问题)之外,这一切都很好 这里的问题是Shift+Tab组合。我想自己处理它,但正如在中所解释的,它被用来推进焦点 我试着把它藏起来 -(BOOL)performKeyEquivalent:(NSEvent *)nsevent { } 我确实为它获取了一个事件,返回TRUE或FALSE,但它仍然没有出现在keyDown中: 我也知道selectNextKeyView:但理想情况下,我正在寻找一种方

我有一个通过keyDown处理击键的应用程序

到目前为止,除了两个问题(稍后我将发布/询问另一个问题)之外,这一切都很好

这里的问题是Shift+Tab组合。我想自己处理它,但正如在中所解释的,它被用来推进焦点

我试着把它藏起来

-(BOOL)performKeyEquivalent:(NSEvent *)nsevent
{

}
我确实为它获取了一个事件,返回TRUE或FALSE,但它仍然没有出现在keyDown中:

我也知道selectNextKeyView:但理想情况下,我正在寻找一种方法,让系统将组合传递给keyDown:进行正常处理(顺便说一句,keyUp:被正确调用)


回答我自己的问题:

我通过截取selectNextKeyView和selectPreviousKeyView并将[NSApp currentEvent]转发给我的键盘处理程序(在keyDown上调用的处理程序:用于所有其他键)解决了这个问题


回答我自己的问题:

我通过截取selectNextKeyView和selectPreviousKeyView并将[NSApp currentEvent]转发给我的键盘处理程序(在keyDown上调用的处理程序:用于所有其他键)解决了这个问题


这是不理想的,因为这些方法可以调用其他原因,不只是Shift + Tab.Prand,您应该考虑使用一些其他键组合,因为用户将被用来使用Tab和Shift + Tab来导航控件,这将是不理想的,因为这些方法可能因为其他原因而被调用,而不仅仅是Shift + Tab.Press,你应该考虑使用一些其他的键组合,因为用户将习惯于使用Tab和Shift +Tab来控制控件,并且会惊讶于它对你的应用程序不起作用。
-(void)selectNextKeyView:(id)sender
{
    // shift+tabbed
}
-(void)selectNextKeyView:(id)sender
{
    // this is part of the keyboard handling.  Cocoa swallows ctrl+Tab and
    // calls sselectNextKeyView, so we create a matchin key event for the occasion
    NSEvent *nsevent= [NSApp currentEvent];
    [self handleKeyEvent:nsevent isRaw:FALSE isUp:FALSE];
}

-(void)selectPreviousKeyView:(id)sender
{
    // this is part of the keyboard handling.  Cocoa swallows ctrl+shift+Tab and
    // calls selectPreviousKeyView, so we create a matchin key event for the occasion
    NSEvent *nsevent= [NSApp currentEvent];
    [self handleKeyEvent:nsevent isRaw:FALSE isUp:FALSE];
}