需求
NSTextField 作为一个常用的输入控件,有些在使用时需要去限制其中可以输入文本的长度,而 NSTextField 本身并没有提供这个功能,这就需要我们自己去想办法来实现了。
方法
在网上找了一下,发现可以通过继承 NSFormatter 实现一个子类来实现这个功能,参考了一下找到的代码[1],再将主要的 isPartialStringValid 方法根据自己的需要改了一下。
- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error { int size = [*partialStringPtr length]; if ( size > maxLength ) { if (origSelRange.location == [origString length]) { // 如果修改的位置在原来字符串的最后,则不做修改,只是拒绝内容修改 } else { // 如果修改的位置在原来字符串的中间,就根据剩余的可用的长度把新增加的字符串进行截取 int preLen = origSelRange.location + (maxLength - [origString length]) + origSelRange.length; *partialStringPtr = [NSString stringWithFormat:@"%@%@", [*partialStringPtr substringToIndex:preLen], [origString substringFromIndex:origSelRange.location+origSelRange.length]]; (*proposedSelRangePtr).location = preLen; } return NO; } return YES; }
Recent Comments