如何在这段代码中限制 UIalertview?

How to restrict UIalertview in this code?

我创建了一个美国格式的手机号码。此代码不显示字母和特殊字符。显示成功但显示UIAlertviews,当用户在UITextfield中输入字母和特殊字符时,显示一些UIAlertview。我怎样才能控制UIAlertviews?我只想显示一个 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;
            }                
        }       
    }

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

在您的 header 中声明一个 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 (![myCharSet characterIsMember:c]) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //show the UIAlertView
    });
}

那个代码不太好。您只是在检查字符串值是否为数字。为此,您可以这样使用 [NSScanner scannerWithString:]

 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];
  }

代码似乎更清晰,也更简单。

希望对您有所帮助!