需求
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;
}
0 条评论。