原来,编辑我的NSFormatter子类本身可能是最容易的。这里是我的NSFormatter方法,如果有人有兴趣:
- (BOOL)isPartialStringValid:(NSString *)partial
newEditingString:(NSString **)newString
errorDescription:(NSString **)errorString
{
*errorString = nil;
*newString = nil;
if ([partial containsIllegal])
{
NSBeep();
return NO;
}
else if ([partial containsNewline])
{
if ([partial length] > 200)
{
NSBeep();
return NO;
}
else
{
*newString = [partial stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
return NO;
}
}
else
return YES;
}
这两个的NSString类的方法有很简单如下:
- (BOOL)containsIllegal
{
for (int i=0; i<[self length]; i++)
{
unichar currentChar = [self characterAtIndex:i];
BOOL charIsIllegal = [[NSCharacterSet illegalCharacterSet] characterIsMember:currentChar];
if (charIsIllegal)
return YES;
}
return NO;
}
- (BOOL)containsNewline
{
for (int i=0; i<[self length]; i++)
{
unichar currentChar = [self characterAtIndex:i];
BOOL charIsNewLine = [[NSCharacterSet newlineCharacterSet] characterIsMember:currentChar];
if (charIsNewLine)
return YES;
}
return NO;
}
这个方法不起作用,验证已经发生时,这种方法是被称为。在OP的情况下,输入事先已被拒绝,并且此方法永远不会被调用。 – 2010-08-30 12:08:11