objective-c - 我正在使用 NSScanner 将文本字段的值限制为仅数字,但我想允许“-”
问题描述
我在自定义 NSNumberFormatter 中有一个 NSScanner,它扫描非整数值,但我希望它跳过“-”(破折号)
- (BOOL)isPartialStringValid:(NSString *)partialString newEditingString:(NSString **)newString errorDescription:(NSString **)error {
if ([partialString length] == 0) {
return YES;
}
NSScanner *scanner = [NSScanner scannerWithString:partialString];
if (!([scanner scanInt:0] && [scanner isAtEnd])) {
return NO;
}
return YES;
}
我以为我必须使用[scanner charactersToBeSkipped]
,但我不知道它是如何工作的
解决方案
我想出了自己的解决方案。每次输入一个字符时,它都会检查第一个字符是否是破折号。如果是,它会跳过第一个字符并检查字符串的其余部分是否包含整数。如果第一个字符不是破折号,它会扫描整个字符串以查找整数。
- (BOOL)isPartialStringValid:(NSString *)partialString newEditingString:(NSString **)newString errorDescription:(NSString **)error {
if ([partialString length] == 0) {
return YES;
}
NSString *stringFromSecondChar;
NSString *firstChar = [partialString substringToIndex:1];
if ([partialString length] > 1 && [firstChar isEqualToString:@"-"]) {
stringFromSecondChar = [partialString substringFromIndex:1];
}
else {
stringFromSecondChar = partialString;
}
NSScanner *scanner = [NSScanner scannerWithString:stringFromSecondChar];
if ([partialString length] == 1 && [firstChar isEqualToString:@"-"]) {
return YES;
}
else if ([partialString length] >= 1 && [stringFromSecondChar containsString:@"-"]) {
return NO;
}
if ([firstChar isEqualToString:@"-"]) {
if (!([scanner scanInt:0] && [scanner isAtEnd])) {
return NO;
}
else {
return YES;
}
}
if (!([scanner scanInt:0] && [scanner isAtEnd])) {
return NO;
}
return YES;
}
推荐阅读
- javascript - 根据 GPS 位置之间的距离过滤对象数组(javascript)
- sql - 巩固我的年和月以获得每个客户、每个月、每年的总数量的方法
- java - Kafka Streams KStream 转换
- vba - 有没有办法在 VBE 窗口处于活动状态时定义快捷键(例如 Ctrl-Y)来启动 VBA 子/宏?
- git - subtree-remote 的 git push 推送了整个 repo,如何撤消?
- android - “CameraDevice”不包含“CameraDirection”的定义
- google-data-studio - 将数据拉入过滤器或新字段
- ansible - 循环打印ip地址
- python - 如何使用 Gunicorn 在 Falcon 中启动应用程序
- ios - 为什么将无法识别的选择器发送到实例?