How can I make the Tab key move focus out of a NSTextView?
I'm using an NSTextView to allo开发者_JS百科w multi-line input. However, due to the nature of my app, users will be more comfortable moving to the next input element when they press TAB.
How can I make TAB exit the NSTextView, while keeping the newline behaviour of the Enter key?
You could implement -textView:doCommandBySelector:
in your text view's delegate:
- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector {
if (aSelector == @selector(insertTab:)) {
[[aTextView window] selectNextKeyView:nil];
return YES;
}
return NO;
}
See http://developer.apple.com/documentation/Cocoa/Reference/NSTextViewDelegate_Protocol
You'll need to implement this in a subclass.
I wrote such a subclass for Translate Text. You're welcome to use it under its BSD license. Here's the header and the implementation file.
… while keeping the newline behaviour of the Enter key?
My main purpose was to send an action to a target when the user presses Enter, and I also have it drop focus from the view. However, both are explicit statements in the code; you can simply comment that code out or delete it.
Swift version of the answers of Wevah & Quinn:
func textView(_ textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
switch commandSelector {
case #selector(NSResponder.insertTab(_:)):
textView.window?.selectNextKeyView(nil)
return true
case #selector(NSResponder.insertBacktab(_:)):
textView.window?.selectPreviousKeyView(nil)
return true
default:
return false
}
}
精彩评论