我有UITextField
。我想检测某个角色是否被估算。这是我试过的“
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
for (int i = 0; i < [textField.text length]; i++) {
if ([textField.text characterAtIndex:i] == @".") { // Error Here
...
}
}
}
我收到错误
Comparison between pointer and integer ('int' and 'NSStirng ')
所以我所做的显然是错的。我的问题是如何解决这个问题?
答案 0 :(得分:1)
您应该考虑使用:- (NSRange)rangeOfString:(NSString *)aString
NSString *string1 = @"The quick brown fox jumped";
NSRange match;
match = [string1 rangeOfString: @"brown fox"];
if (match.location == NSNotFound)
NSLog (@"Match not found");
else
NSLog (@"match found");
答案 1 :(得分:0)
当它应该返回变量类型“char”时,它将它与字符串进行比较。您应该使用单引号而不是double。试试这个:
if([textField.text characterAtIndex:i]=='.')
//DoSomething
答案 2 :(得分:0)
这个怎么样?
if ([textField.text characterAtIndex:i] == [@".".characterAtIndex:0])
答案 3 :(得分:0)
您不希望在textField:shouldChangeCharactersInRange:replacementString:
方法中包含该循环,因为每次对textField
进行更改时都会调用该方法(添加字符,删除字符,等等)。这意味着,您的循环将在任何时间运行textField.text.length
次对textField.text
进行了更改。
如Numbers separated by commas in UITextField not working中所述,正在调用此方法以确定是否应进行更改。此外,因为您正在textField.text
检查.
而不是string
,所以在 之后输入某些内容之前,您的情况将不会是TRUE
> .
已添加。
以上是做什么的?当我们遇到NSLog
时,我接受了您的循环以及接受的答案,并添加.
来运行。
我首先输入123
,然后在输入.
后暂停一下。您可以看到,尽管键入.
,NSLog
实际上并没有发生,直到我键入下一个数字。此外,NSLog
语句现在将在每个新字符上运行 - 增加每个后续.
的日志消息数
有什么替代方案?好吧,这取决于遇到.
时代码需要做什么。但为了确保您在正确的时间执行代码,我会
string
中的textField.text
(不是textField:shouldChangeCharactersInRange:replacementString:
)..对于此项检查,这样做要简单得多:
if( [string isEqualToString:@"."] ){ // Do something }
或
最后,为什么这个问题值得用视觉辅助设备做出如此冗长的答案?您的问题以及随后的响应是一个很好的示例,说明如何在您的代码中引入一个微妙的错误并仍能获得所需的结果。 NSLog
将成为你最信任的盟友之一;大量使用它来解构一个错误并对你的编码问题/问题进行逆向工程。