Temporarly我通过观察文本字段上的通知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的建议,它的工作正常,这里是自定义格式化程序代码:UPDATED:添加了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文本长度并保持总是大写?全部内容,希望文章能够帮你解决objective-c – 如何限制NSTextField文本长度并保持总是大写?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)