0

マップの注釈用にこのコードがここにあります...

//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!");
    }
}

それは上のすべてのアラート オブジェクトに適用され、同じ番号を取得しました。電話をかけたいときに、すべてのアラート オブジェクトが独自の電話番号を取得するようにします。

4

5 に答える 5

2

アラート ビューにタグを追加するだけです

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:ます。

if (alertView.tag == 0) {
  // call Al-saidiya
}
...
于 2013-10-27T14:12:36.180 に答える
1

タイトルと電話番号は 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];

}

これは、拡張するために追加のコードを記述する必要がなく、辞書にエントリを追加するだけなので (自動的にまたはその他の方法で) 拡張性が大幅に向上します。

于 2013-10-27T16:04:19.320 に答える
1

tilo によって提案されたソリューションが機能したとしても、UIAlertview のようなオブジェクトの複数のインスタンスがある場合、適切なアプローチではないと思います。

代わりにブロックを使用することをお勧めします。 これらのカテゴリ(プロジェクトは UIActionSheet に同じパターンを使用します) を使用すると、アクション ブロックを alertView の特定のボタンにバインドできます。

このアプローチを使用すると、デリゲート パターンを使用してすべての if/switch ステートメントを取り除くことができます。

于 2013-10-27T14:36:07.973 に答える