如何在这段代码中限制 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];
}
代码似乎更清晰,也更简单。
希望对您有所帮助!
我创建了一个美国格式的手机号码。此代码不显示字母和特殊字符。显示成功但显示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];
}
代码似乎更清晰,也更简单。
希望对您有所帮助!