0

我在 mapView 上放了许多注释。这适用于下面的代码

float userLatitude = [[userDict objectForKey:@"lat"]floatValue];
float userLongitude = [[userDict objectForKey:@"long"]floatValue];
NSString *someString = [someArray objectAtIndex:i];
NSString *anotherString = [anotherArray objectAtIndex:i];

    CLLocationCoordinate2D loopCoord = {.latitude =  userLatitude, .longitude =  userLongitude};

    MapAnnotationViewController *addAnnotation = [[MapAnnotationViewController alloc] initWithCoordinate:loopCoord];
        self.localImage = [UIImage imageNamed:@"first.png"];
        [addAnnotation setTitle:someString];
        [addAnnotation setSubTitle:anotherString];
        [mainMapView addAnnotation:addAnnotation];

我本质上想添加一个自定义触摸,即使当一个人触摸地图上的每个注释时也会触发。该方法需要从地图上的特定位置触发(不是标准的 didSelect)我如何标记或将每个注释中的参数传递给委托方法:

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view

我如何获得这样的代码:

UITapGestureRecognizer *singleFingerTap = 
  [[UITapGestureRecognizer alloc] initWithTarget:self 
                                          action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleFingerTap];
[singleFingerTap release];

//The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
  CGPoint location = [recognizer locationInView:[recognizer.view superview]];

  //Do stuff here...
}

传递给didSelectAnnotationView每个特定的注释?

4

1 回答 1

1

我相信传统的方法是创建一个实现 MKAnnotation 协议的类并将您的自定义数据存储在其中。您需要将标题、副标题和坐标作为标准存储,并且可以添加 touchSelector。然后当 didSelect 方法被调用时,其中一个参数是 MKAnnotationView,它有一个名为 annotation 的属性。将其转换为您的自定义类,然后访问该选择器属性。

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
 {
   MyAnnotationClass *myAnno = (MyAnnotationClass *)view.annotation;
   //Do something with myAnno.touchSelector;
}

这是一个关于在您自己的 MKAnnotation 兼容类中 存储数据的问题:在 MKAnnotation 中存储数据?

于 2012-08-17T22:26:40.027 回答