For limiting text in NSTextField this works well: (_limit == 5, 30, etc.)

- (BOOL)isPartialStringValid:(NSString *__autoreleasing *)partialStringPtr
       proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
              originalString:(NSString *)origString
       originalSelectedRange:(NSRange)origSelRange
            errorDescription:(NSString *__autoreleasing *)error {
    
    NSString *partialStr = *partialStringPtr;
    if ([partialStr length]) {        
        if ([partialStr length] <= _limit) {
            *partialStringPtr = [partialStr uppercaseString];
            return NO;
        }
        *partialStringPtr = [NSString stringWithString:origString];
        *proposedSelRangePtr = NSMakeRange(origSelRange.location, 
origSelRange.length);
        return NO;
    } else {
        return YES;
    }
}

Want only certain char? Do that:

- (NSCharacterSet *)forbiddenSet {
    if (!_forbiddenSet) {
        NSString *alphaStr = @"qwertyuiopasdfghjklzxcvbnm";
        NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet 
characterSetWithCharactersInString:alphaStr];
        [allowedSet addCharactersInString:[alphaStr uppercaseString]];
        _forbiddenSet = [allowedSet invertedSet];
    }
    return _forbiddenSet;
}

- (BOOL)isPartialStringValid:(NSString *__autoreleasing *)partialStringPtr
       proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
              originalString:(NSString *)origString
       originalSelectedRange:(NSRange)origSelRange
            errorDescription:(NSString *__autoreleasing *)error {
    
    NSString *partialStr = *partialStringPtr;
    if ([partialStr length]) {
        NSRange rangeOfForbiddenChar = [partialStr 
rangeOfCharacterFromSet:[self forbiddenSet]];
        if ((rangeOfForbiddenChar.location == NSNotFound) && ([partialStr 
length] <= _limit)) {
            *partialStringPtr = [partialStr uppercaseString];
            return NO;
        }
        *partialStringPtr = [NSString stringWithString:origString];
        *proposedSelRangePtr = NSMakeRange(origSelRange.location, 
origSelRange.length);
        return NO;
    } else {
        return YES;
    }
}
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to