开发者

How can I make the Tab key move focus out of a NSTextView?

开发者 https://www.devze.com 2022-12-23 19:47 出处:网络
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.

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
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消