gpt4 book ai didi

objective-c - 如何限制 NSTextField 文本长度并始终保持大写?

转载 作者:太空狗 更新时间:2023-10-30 03:11:02 25 4
gpt4 key购买 nike

需要一个 NSTextField,其文本限制最多为 4 个字符,并且始终以大写字母显示,但无法找到实现该目标的好方法。我尝试通过与验证方法的绑定(bind)来完成此操作,但只有当控件失去第一响应者时才会调用验证,这并不好。

我暂时通过观察文本字段上的通知 NSControlTextDidChangeNotification 并让它调用方法来使其工作:

- (void)textDidChange:(NSNotification*)notification {
NSTextField* textField = [notification object];
NSString* value = [textField stringValue];
if ([value length] > 4) {
[textField setStringValue:[[value uppercaseString] substringWithRange:NSMakeRange(0, 4)]];
} else {
[textField setStringValue:[value uppercaseString]];
}
}

但这肯定不是最好的方法。有更好的建议吗?

最佳答案

我按照 Graham Lee 的建议做了并且工作正常,这是自定义格式化程序代码:

更新:添加了 Dave Gallagher 报告的修复。谢谢!

@interface CustomTextFieldFormatter : NSFormatter {
int maxLength;
}
- (void)setMaximumLength:(int)len;
- (int)maximumLength;

@end

@implementation CustomTextFieldFormatter

- (id)init {

if(self = [super init]){

maxLength = INT_MAX;
}

return self;
}

- (void)setMaximumLength:(int)len {
maxLength = len;
}

- (int)maximumLength {
return maxLength;
}

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

- (BOOL)getObjectValue:(id *)object forString:(NSString *)string errorDescription:(NSString **)error {
*object = string;
return YES;
}

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

if (![*partialStringPtr isEqual:[*partialStringPtr uppercaseString]]) {
*partialStringPtr = [*partialStringPtr uppercaseString];
return NO;
}

return YES;
}

- (NSAttributedString *)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(NSDictionary *)attributes {
return nil;
}

@end

关于objective-c - 如何限制 NSTextField 文本长度并始终保持大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/827014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com