objective-c – 如何限制NSTextField文本长度并保持总是大写?

objective-c – 如何限制NSTextField文本长度并保持总是大写?,第1张

概述需要一个文本限制最多为4个字符的NSTextField,并且始终以大写形式显示,但无法找出实现该方法的好方法。我试图通过一个验证方法的绑定来做到这一点,但只有当控件失去第一个响应者时才会调用该验证,并且没有任何好处。 Temporarly我通过观察文本字段上的通知NSControlTextDidChangeNotification,并调用方法,使其工作: - (void)textDidChange 需要一个文本限制最多为4个字符的NSTextFIEld,并且始终以大写形式显示,但无法找出实现该方法的好方法。我试图通过一个验证方法的绑定来做到这一点,但只有当控件失去第一个响应者时才会调用该验证,并且没有任何好处。

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文本长度并保持总是大写?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1041117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存