4

マップビューがあり、データがWebサービスを介して取得される店舗の場所が10か所あります。クリックしたストアの住所、電話番号、その他の情報を表示するには、詳細ビューにプッシュしたいだけです。

detailviewユーザーがマップキットの注釈をタップまたは修正したときに、データを自分に渡す必要があります。私には10個の注釈がありmapview、最初に知りたいのですが、どのように理解できますか、またはどの注釈がクリックされたかのannotationIDを取得するにはどうすればよいですか?

これは私がピンを返す方法です

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{

    if ([annotation isKindOfClass:[MKUserLocation class]]) return nil;

    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";

    MKPinAnnotationView* pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];

     pinView.animatesDrop=YES;
     pinView.canShowCallout=YES;
     pinView.pinColor=MKPinAnnotationColorPurple;

     UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
     [rightButton setTitle:annotation.title forState:UIControlStateNormal];

     [rightButton addTarget:self
     action:@selector(showDetails:)
     forControlEvents:UIControlEventTouchUpInside];

     pinView.rightCalloutAccessoryView = rightButton;

    return pinView;
}
   /* and my action method for clicked or tapped annotation: */

 - (IBAction)showDetails:(id)sender{

      NSLog(@"Annotation Click");

      [[mtMap selectedAnnotations]objectAtIndex:0];
      magazaDetayViewController *detail = [[magazaDetayViewController 
      alloc]initWithNibName:@"magazaDetayViewController" bundle:nil];

      detail.sehir=@"";
      detail.magazaAdi=@"";
      detail.adres=@"";
      detail.telefon=@"";
      detail.fax=@"";
      [self.navigationController pushViewController:detail animated:YES];

 }

クリックされたアノテーションインデックスを取得できれば、詳細プロパティを配列で埋めることはできません。これが不可能な場合、他に方法はありますか?

4

3 に答える 3

9

まず、注釈ビューの委任者が、次のように詳細ビューに移動するためのボタンを作成します。

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{

MKPinAnnotationView *mypin = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"current"];
mypin.pinColor = MKPinAnnotationColorPurple;
mypin.backgroundColor = [UIColor clearColor];
UIButton *goToDetail = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
mypin.rightCalloutAccessoryView = myBtn;
mypin.draggable = NO;
mypin.highlighted = YES;
mypin.animatesDrop = TRUE;
mypin.canShowCallout = YES;
return mypin;
}

これで、annotationViewのボタンがタップされるたびに次のデリゲートを使用します。次のデリゲートが呼び出され、そこから特定の注釈のボタンがタップされていることを簡単に取得できます。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
 calloutAccessoryControlTapped:(UIControl *)control
{
annotation *annView = view.annotation;
detailedViewOfList *detailView = [[detailedViewOfList alloc]init];
detailView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
detailView.address = annView.address;
detailView.phoneNumber = annView.phonenumber;
[self presentModalViewController:detailView animated:YES];
}

ここで、annotaionはMKAnnotaion.hをインポートするクラスであり、addressとphonenumberはannotaionクラスのプロパティであり、detailViewクラスのaddressとphoneNumberのプロパティは強力です。値を渡すことができるように。これがお役に立てば幸いです。

于 2012-05-22T09:11:27.603 に答える
0

ベローは.....のデリゲートメソッドですMapView

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{

}

ユーザーがメソッド呼び出しの上のアノテーションピンを自動的にタップすると、メソッドが.mファイルで定義されている場合nutは最初MKMapViewDelegateに.hファイルでデリゲートを宣言します

また、Google PlaceAPIからタイトルまたはサブタイトルとIDを取得できます。リンクは... https://developers.google.com/maps/documentation/places/

于 2012-05-22T08:51:07.210 に答える
0
for(int i=0; i<[arrLat count];i++) {

CLLocationCoordinate2D theCoordinate1; 
konumpin* myAnnotation1=[[konumpin alloc] init]; 

theCoordinate1.latitude = [[arrLong objectAtIndex:i] doubleValue]; 

theCoordinate1.longitude = [[arrLat objectAtIndex:i] doubleValue]; 

myAnnotation1.coordinate=theCoordinate1; 
myAnnotation1.title=[arrMagaza objectAtIndex:i]; 
[annotations addObject:myAnnotation1]; 

} 

[mtMap addAnnotations:annotations];
于 2014-02-14T18:08:16.233 に答える