1

私はXcodeを初めて使用するので、ばかげている場合は私の質問を許してください

UIAlertViewボックスにリンクされた注釈があります。2つの選択肢(閉じる、ここまでの方向)があります。2番目のボタンはApple Mapsアプリケーションを開き、ユーザーにターンバイターン方式のナビゲーションを即座に提供します。

今私の問題は、マップ上に多くの注釈があり、すべての注釈を押すと、ユーザーはナビゲーションを取得するオプションを取得する必要があるということです。したがって、固定のMKPlacemarkがないので、押された注釈からMKPlacemarkに情報を渡して、MKMapItemが目的の見出し位置を取得するようにする必要があります。

私のコードは:

UIAlertViewを表示する私のアノテーションメソッド:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
// get reference to the annotation to access its data
VBAnnotation *ann = (VBAnnotation *)view.annotation;
// deselect the button
[self.mapView deselectAnnotation:ann animated:YES];

// display alert view to the information
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:ann.title message:ann.info delegate:self cancelButtonTitle:@"close" otherButtonTitles:@"direction to here", nil];
[alert show];
}

ここに私のUIAlertViewボタンのアクションがあります:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"direction to here"])
{        

//now here i tried a fixed coordination, but i need to pass the actual coordination pressed by the UIAlertView
CLLocationCoordinate2D coordinate;
    coordinate.latitude = 24.41351;
    coordinate.longitude = 39.543002;

    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
    MKMapItem *navigation = [[MKMapItem alloc]initWithPlacemark:placemark];
    NSDictionary *options = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeWalking};
    [navigation openInMapsWithLaunchOptions:options];

}
}

これが私の注釈リストのサンプルです

NSMutableArray *annotations = [[NSMutableArray alloc] init];
CLLocationCoordinate2D location;
VBAnnotation *ann;


//Annotations List

// Mecca Pin
location.latitude = MEC_LATITUDE;
location.longitude = MEC_LONGITUDE;
ann = [[VBAnnotation alloc] init];
[ann setCoordinate:location];
ann.title = @"NewHorizons Institute";
ann.subtitle = @"English and computer training center";
[annotations addObject:ann];
[self.mapView addAnnotations:annotations];

もちろん、私はVBAnnotationと呼ばれるクラスを持っています

ありがとう ...

4

1 に答える 1

2

私が正しく理解している場合はVBAnnotation、アラートビューデリゲートメソッドがオブジェクトにアクセスできるように、オブジェクトを覚えておく必要があります。objc_setAssociatedObject()アラートビューを表示する直前にオブジェクトをアラートビューに関連付けるために使用できます。次にobjc_getAssociatedObject()、アラートに対するユーザーの応答を処理するときに、を使用してオブジェクトを取得できます。

この記事には、Obj-C関連オブジェクトの詳細が記載されています。関数を取得するためにインポートするファイルは次のとおりです。

#import <objc/runtime.h>

VBAnnotationオブジェクトをある種の数値IDまたはインデックスで識別できる場合、より簡単な方法は、そのIDまたはインデックスをアラートビューのプロパティに格納することtagです。これUIAlertViewはのサブクラスでUIViewあり、したがってそのプロパティを継承します。

于 2013-01-01T02:38:37.633 に答える