将限制设置为 NSTextField

use*_*975 2 macos cocoa nstextfield

我需要为 TextFields 设置字符限制。我遵循了这个答案,我能够设置一个限制。但是现在当我按下回车键时,所有字符都被清除了。什么地方出了错 ?

- (BOOL)isPartialStringValid:(NSString *__autoreleasing *)partialStringPtr
       proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
              originalString:(NSString *)origString
       originalSelectedRange:(NSRange)origSelRange
            errorDescription:(NSString *__autoreleasing *)error {
    if ([*partialStringPtr length] > maxLength)
        return NO;
    else
        return YES;
}

- (NSString *)stringForObjectValue:(id)obj {
    return (NSString*) obj;
}

- (BOOL)getObjectValue:(out __autoreleasing id *)obj
             forString:(NSString *)string
      errorDescription:(out NSString *__autoreleasing *)error {
    return YES;
}

- (NSAttributedString *)attributedStringForObjectValue:(id)obj
                                 withDefaultAttributes:(NSDictionary *)attrs {
    return (NSAttributedString*) obj;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*sen 5

如何将自己设置为 NSTextField 的委托并实现此委托方法?

- (void)textDidChange:(NSNotification *)aNotification
Run Code Online (Sandbox Code Playgroud)

在那里您可以检查文本是否太长,如果是这种情况,则将其剪切。

NSTextField *textField = (NSTextField *)[aNotification object];
if ([textField.stringValue length] > maxLength)
{
    textField.stringValue = [textField.stringValue substringWithRange:NSMakeRange(0,maxLength)];
}
Run Code Online (Sandbox Code Playgroud)