How to pass sender tag in DetailView to get default Map application for direction?

前端 未结 1 385
栀梦
栀梦 2021-01-28 07:13

I am opening the Detailview on annotation pin as well as on tableview. To get direction from detailview I have place following button click event.

Edited

相关标签:
1条回答
  • 2021-01-28 07:28

    Based on the code posted, here is my understanding:

    marker is the top-level class that stores all the details about a location including address and city.

    AddressAnnotation is the class that implements the MKAnnotation protocol currently containing just the coordinate, title, and subtitle for a location (it does not have the address and city). This is the class used to create objects that are passed to the map view's addAnnotation method.

    What you would like to do is that when the callout button is pressed on an annotation, you would like to show some detail view or information that requires the address and city.

    Instead of trying to keep track of array indexes using tags or searching for objects in arrays, I suggest adding a reference to the marker in AddressAnnotation. This way, when you have an AddressAnnotation object, you can get its related marker object using that reference (no searching or indexes needed).

    In the AddressAnnotation class, add a retain property of type marker called parentMarker. When you create an AddressAnnotation object from a marker and before calling addAnnotation, set the parentMarker property to the current marker.

    Then in calloutAccessoryControlTapped, cast view.annotation to an AddressAnnotation to get easy access to the parentMarker property. Now you can get the address and city from the marker. (By the way, in that method you don't need to cast view to MKAnnotationView since it already is one and you don't have to name it annView.)

    I am not sure what BcardView is and why you're checking if it's hidden or not.

    I'd also suggest a slight improvement to the viewForAnnotation method (use a non-blank re-use id and move the setting of the properties that don't change to inside the if):

    - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>) annotation
    {
        MKAnnotationView *annView = (MKAnnotationView *)[mapView 
            dequeueReusableAnnotationViewWithIdentifier:@"AddrAnnot"];
    
        if (annView == nil)
        {
            annView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 
                reuseIdentifier:@"AddrAnnot"] autorelease];
            annView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            annView.image = [UIImage imageNamed:@"flag.png"];
            [annView setEnabled:YES];
            [annView setCanShowCallout:YES];
        }
    
        annView.annotation = annotation;
    
        return annView;
    }
    
    0 讨论(0)
提交回复
热议问题