原來,編輯我的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