cocoanstextfieldnstextviewfieldeditor

Disable Option-Enter line breaks in NSTextField?


I want to disallow entering a new-line character in my NSTextField, which by default is possible by typing Option-Enter (or Option-Return).

While I found some pages explaining how to allow line breaks without having to use the Option modifier, I couldn't find anything for disabling line breaks altogether.

How can this be done?


Solution

  • You could create a subclass of NSFormatter and implement the isPartialStringValid:... method to block the newline.

    - (BOOL)isPartialStringValid:(NSString **)partialStringPtr 
           proposedSelectedRange:(NSRangePointer)proposedSelRangePtr 
                  originalString:(NSString *)origString 
           originalSelectedRange:(NSRange)origSelRange 
                errorDescription:(NSString **)error
    {
        // the user may have:
        // -- deleted the left most character
        // -- deleted the last character and we have an empty string
        // both cases are valid
        if (proposedSelRangePtr->location == 0)
            return YES;
    
        unichar theChar = [*partialStringPtr characterAtIndex:proposedSelRangePtr->location - 1];
    
        if ([[NSCharacterSet newlineCharacterSet] characterIsMember:theChar]) {
            *error = nil;
            NSBeep();
            return NO;
        }
    
        return YES;
    }