質問

I have an app that has a mapview, and it shows 20 pins (from an Array) on the map. When the user clicks on it, it can show a bubble with a right accessory button. Here come my problem: How do I know which pin was pressed? I heard something about the mapView:didSelectAnnotationView method, but I don't really understand how do you get the pin/callout index, so that I can get the information of the object at the same index of my Array? Thanks for any help!

役に立ちましたか?

解決

When that method gets called -- because your viewController class has adopted MKMapViewDelegate, you can call -indexOfObject on the array and get the index of that pin (annotation). This is with the assumption that your array holds objects of the kind of annotation class.

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
        // Annotation is your custom class that holds information about the annotation
        if ([view.annotation isKindOfClass:[Annotation class]]) {
            Annotation *annot = view.annotation;
            NSInteger index = [self.arrayOfAnnotations indexOfObject:annot];
        }
    }

If you need more explanation, we need to know how you are adding those pins, i.e. implementation of - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation.

他のヒント

Here is a similar solution to Canopus'.

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    if ([view.annotation isKindOfClass:[MyAnnotation class]]) 
    {
        NSInteger index = [mapView.annotations indexOfObject:view.annotation];
        NSLog(@"%d",index);
    }

Note: I was manually adding annotations to the map and then viewing their respective indexes. They don't get indexed in the order they are added to the mapView. i.e., just because you added a annotation as the fourth annotation it may have an index of 1 or 3 or whatever. Someone may have a explanation for that but it has eluded me till now. Hope this helps.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top