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
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;
}