Search code examples
objective-ccocoanstextfield

Anyway to make a (wrapping) NSTextField write a carriage return upon pressing return key?


I want to use a wrapping text field that can potentially contain carriage returns in my app. Is there any way to force the NSTextField object to write a carriage return into the text area instead of sending its action to its target when the Return key is pressed?


Solution

  • This is covered in Technical Q&A QA1454, which also enumerates reasons why one would use NSTextField instead of NSTextView in this case.

    You can implement the following method in the text field delegate:

    - (BOOL)control:(NSControl*)control
        textView:(NSTextView*)textView
        doCommandBySelector:(SEL)commandSelector
    {
        BOOL result = NO;
    
        if (commandSelector == @selector(insertNewline:))
        {
            // new line action:
            // always insert a line-break character and don’t cause the receiver
            // to end editing
            [textView insertNewlineIgnoringFieldEditor:self]; 
            result = YES;
        }
    
        return result;
    }