检测是否在UITextField中插入了字符

时间:2015-04-19 04:42:58

标签: ios objective-c uitextfield

我有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 ')

所以我所做的显然是错的。我的问题是如何解决这个问题?

4 个答案:

答案 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.lengthtextField.text进行了更改。

循环太多:


Numbers separated by commas in UITextField not working中所述,正在调用此方法以确定是否应进行更改。此外,因为您正在textField.text检查.而不是string,所以在 之后输入某些内容之前,您的情况将不会是TRUE > .已添加。

被叫太晚/经常:

以上是做什么的?当我们遇到NSLog时,我接受了您的循环以及接受的答案,并添加.来运行。 我首先输入123,然后在输入.后暂停一下。您可以看到,尽管键入.NSLog实际上并没有发生,直到我键入下一个数字。此外,NSLog语句现在将在每个新字符上运行 - 增加每个后续.的日志消息数


有什么替代方案?好吧,这取决于遇到.时代码需要做什么。但为了确保您在正确的时间执行代码,我会

  1. 检查string中的textField.text(不是textField:shouldChangeCharactersInRange:replacementString:)..对于此项检查,这样做要简单得多: if( [string isEqualToString:@"."] ){ // Do something }
    1. 使用我发布的链接作为指南,并将文本字段作为编辑通知的目标。

    2. 最后,为什么这个问题值得用视觉辅助设备做出如此冗长的答案?您的问题以及随后的响应是一个很好的示例,说明如何在您的代码中引入一个微妙的错误并仍能获得所需的结果。 NSLog将成为你最信任的盟友之一;大量使用它来解构一个错误并对你的编码问题/问题进行逆向工程。