Ios 如何在此代码中限制UIalertview?

Ios 如何在此代码中限制UIalertview?,ios,uialertview,Ios,Uialertview,我已经创建了一个美国格式的手机号码。此代码不显示字母和特殊字符。它成功地显示但显示了UIAlertview,当用户在UITextfield中输入字母和特殊字符时,它会显示一些UIAlertview。如何控制UIAlertView?我只想显示一个Alertview 这是我已经拥有的代码: if(textField==mobileNo) { NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharacte

我已经创建了一个美国格式的手机号码。此代码不显示字母和特殊字符。它成功地显示但显示了
UIAlertview
,当用户在
UITextfield
中输入字母和特殊字符时,它会显示一些
UIAlertview
。如何控制
UIAlertView
?我只想显示一个
Alertview

这是我已经拥有的代码:

if(textField==mobileNo)
    {
        NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

        for (int i = 0; i < [string length]; i--) {
            unichar c = [string characterAtIndex:i];
            if (![myCharSet characterIsMember:c]) {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Alphbets and Special characters not allowed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                [alert show];
                return NO;
            }                
        }       
    }
if(textField==mobileNo)
{
NSCharacterSet*myCharSet=[NSCharacterSet characterSetWithCharactersInString:@“0123456789”];
对于(int i=0;i<[字符串长度];i--){
unichar c=[string characterAtIndex:i];
如果(![myCharSet成员:c]){
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@“错误”消息:@“不允许使用Alphbets和特殊字符”委托:自取消按钮:@“确定”其他按钮:无,无];
[警报显示];
返回否;
}                
}       
}

您可以尝试以下方法。。。但这不是一个很好的解决方案

在标题中声明一个BOOL,以检查警报视图是否已显示,如下所示:

BOOL alertCheck;
在viewDidLoad中,将其设置为否:

alertCheck = NO;
然后在代码中,在决定显示alertview之前进行检查

if(textField==mobileNo) { 

    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

    for (int i = 0; i < [string length]; i--) {
        unichar c = [string characterAtIndex:i];
        if (![myCharSet characterIsMember:c]) {
            if (alertCheck == NO) {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Alphbets and Special characters not allowed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                [alert show];

                alertCheck = YES;
            }
            return NO;
        }

    }

}
if(textField==mobileNo){
NSCharacterSet*myCharSet=[NSCharacterSet characterSetWithCharactersInString:@“0123456789”];
对于(int i=0;i<[字符串长度];i--){
unichar c=[string characterAtIndex:i];
如果(![myCharSet成员:c]){
如果(alertCheck==否){
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@“错误”消息:@“不允许使用Alphbets和特殊字符”委托:自取消按钮:@“确定”其他按钮:无,无];
[警报显示];
alertCheck=是;
}
返回否;
}
}
}

您可以尝试以下方法:

if (![myCharSet characterIsMember:c]) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //show the UIAlertView
    });
}

那代码不太好。您只是检查字符串值是否为数字。为此,您可以使用以下方法:

 bool isNumber = [[NSScanner scannerWithString: string] scanInt:nil]
 if (!isNumber) {
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Alphbets and Special characters not allowed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
     [alert show];
  }
代码似乎更清晰、更简单


希望有帮助

这段代码是用什么方法编写的?何时调用?在何处申报BOOL alertcheck@正如我在回答中所说的,在你的头(.h)代码文件中。@Dan为什么只为了检查字符串是否是数字而编写12行代码?这对任何人都没有帮助。这代码不好。@FabKremer冷静点。我从来没有说过我的解决方案是好的。事实上,我回答的第一行说,这不是一个好的解决方案。但它确实有效,而且同样容易实现。这取决于要求他们决定使用哪种解决方案的人。@Dan我很平静。我只是说,你可以试着在快速发布之前想出好的解决方案,以提高你的声誉:)对于这样一个小问题,这不是有点过分了吗?在这种情况下,使用一个简单的BOOL并检查它更合适吗?也许可以使用一个静态变量来代替token,但我更喜欢这种方法,而不是声明一个属性,因为这样更易于读取和跟踪。我个人不认为这是一种过分的做法,因为它不会给代码增加太多的复杂性