UIAlertView IndexButton

我在这里有这个代码在我的地图注释…

//alert view if ([ann.title isEqual: @"Al-saidiya"]) { NSString *msg=@"Phone No : 079011111"; UIAlertView *alert1 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"Call Us", nil]; [alert1 show]; } else if ([ann.title isEqual: @"Al-Kadmiya"]) { NSString *msg=@"Phone No : 07902222222"; UIAlertView *alert2 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"Call Us", nil]; [alert2 show]; } else if ([ann.title isEqual: @"Palestine St"]) { NSString *msg=@"Phone No : 0790333333"; UIAlertView *alert3 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles: @"Call Us",nil]; [alert3 show]; } else if ([ann.title isEqual: @"Karada Maryam"]){ NSString *msg=@"Phone No : 07905867"; UIAlertView *alert4 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"Call Us", nil]; [alert4 show]; } else if ([ann.title isEqual: @"Mansour Office"]) { NSString *msg=@"Phone No : 07954212"; UIAlertView *alert5 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles: @"Call Us",nil]; [alert5 show]; } else if ([ann.title isEqual: @"Hunting Club"]) { NSString *msg=@"Phone No : 079337745"; UIAlertView *alert6 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles: @"Call Us",nil]; [alert6 show]; } else if ([ann.title isEqual: @"Al-jadriya"]) { NSString *msg=@"Phone No : 07976231"; UIAlertView *alert7 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles: @"Call Us",nil]; [alert7 show]; } else if ([ann.title isEqual: @"Al-jamea'a"]) { NSString *msg=@"Phone No : 07865323"; UIAlertView *alert8 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"ok" otherButtonTitles: @"Call Us",nil]; [alert8 show]; } 

}

而当我应用这种方法::

 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex==1){ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"telprompt://576576576"]]]; NSLog(@"It works!"); } } 

它已经应用在每个提醒对象上面,并采取相同的号码。我希望每个警报对象得到自己的电话号码,当我想打电话。

首先在上面的代码中的alertview中设置标签,然后在下面的方法中。 像这样尝试:

  -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { int indexValue=alertView.tag; switch (indexValue) { case 0: NSLog (@"zero"); //your code break; case 1: NSLog (@"one"); //your code break; case 2: NSLog (@"two"); //your code break; case 3: NSLog (@"three"); // your code break; case 4: NSLog (@"four"); //your code break; case 5: NSLog (@"five"); // your code break; ...... Up to case 8: // your code break; default: NSLog (@"done"); break; } 

只需将标签添加到您的警报视图

 if ([ann.title isEqual: @"Al-saidiya"]) { NSString *msg=@"Phone No : 079011111"; UIAlertView *alert1 = [[UIAlertView alloc]initWithTitle:@"Contact" message:msg delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"Call Us", nil]; alert1.tag = 0; // <-- [alert1 show]; } 

并检查alertView:clickedButtonAtIndex:的标签alertView:clickedButtonAtIndex: ::

 if (alertView.tag == 0) { // call Al-saidiya } ... 

那么即使由tilo提出的解决scheme的工作,我认为是不正确的方法,当你有像UIAlertview对象的多个实例。

我想build议你使用块代替。 这些类别 (该项目使用UIActionSheet相同的模式)允许您将一个操作块绑定到alertView中的特定button。

使用这种方法,您可以使用委托模式来清除所有的if / switch语句。

由于标题和电话号码是1:1的关系,我会使用一个字典:

 NSDictionary *titlesAndMessages = @{@"Al-saidiya" : @"Phone No : 079011111", @"Al-Kadmiya" : @"Phone No : 07902222222", @"Palestine St" : @"Phone No : 0790333333"}; 

 NSString *messageString = nil; for (NSString *keyTitle in [titlesAndMessages allKeys]) { if ([ann.title isEqualToString:keyTitle]) { messageString = [titlesAndMessages objectForKey:keyTitle]; break; } } UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Contact" message:messageString delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"Call Us", nil]; [alert show]; 

}

这样可以更好地扩展,因为不需要编写任何其他代码来扩展,只需将条目添加到字典(自动或其他)即可。

使用UIAlertViewDelegate非常笨拙。 我build议每个人都使用PSAlertView进行任何不重要的警报使用。

使用这个,代码变得简单和自包含。

 - (void)promptToContact:(NSString *)message withNumber:(NSString *)phoneNumber { PSAlertView *alert = [[PSAlertView alloc] initWithTitle:@"Contact"]; [alert setCancelButtonWithTitle:@"Dismiss" block:^{}]; [alert addButtonWithTitle:@"Call" block:^{ NSString *urlString = [NSString stringWithFormat:@"telprompt://%@", phoneNumber]; NSURL *url = [NSURL urlWithString:urlString]; [[UIApplication sharedApplication] openURL:url]; }]; [alert show]; }