将限制设置为NSTextField

时间:2014-02-26 06:05:30

标签: macos cocoa nstextfield

我需要为TextFields设置一个字符限制。我遵循了这个answer,我能够设定一个限制。但现在当我按下输入时,所有字符都被删除了。出了什么问题?

- (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;
}

2 个答案:

答案 0 :(得分:4)

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

- (void)textDidChange:(NSNotification *)aNotification

在那里你可以检查文字是否太长然后在这种情况下剪掉它。

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

答案 1 :(得分:0)

Swift 4

extension NSTextField{
    func controlTextDidChange(obj: NSNotification){}
}

override func controlTextDidChange(_ obj: Notification)
{

        let object = obj.object as! NSTextField
        if object.stringValue.count > 10{
            object.stringValue = String(object.stringValue.dropLast())
        }
}