Search code examples
iosxcodedictionarymkmapviewmkpinannotationview

How to adjust the frame of right accessor to top right in MapView annotation?


I want to add the right accessor image(cross image) to the top right corner as shown in the image below, but i am not able to get the code for it: I am using the following code but its not giving me what i need.I need the cross button at the place shown in the image below.

annView.leftCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];

       UIImage *listImage = [UIImage imageNamed:@"Close_normal.png"];
       UIButton *listButton = [UIButton buttonWithType:UIButtonTypeCustom];

       // get the image size and apply it to the button frame
      // listButton.frame = CGRectMake(0,0,56,68);

       CGRect listButtonFrame = listButton.frame;


    listButtonFrame.size = listImage.size;
       listButton.frame = listButtonFrame;

       [listButton setImage:listImage forState:UIControlStateNormal];

   annView.rightCalloutAccessoryView = listButton;

enter image description here

And then also what i have to do is when i click on the cross button it should close the info pop up and remove the annotation

- (void) mapView:(MKMapView *)mv annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
 {
if( // left accessor is clicked then execute this code)  // what should i write here
 {
 SiteAnnotation *site = (SiteAnnotation *)view.annotation;
  if(site.category == -1) {
   if(addressAnnotation) {
       [mapView removeAnnotation:addressAnnotation];
AddViewController *vc = [[[AddViewController alloc]        initWithCoordinate:addressAnnotation.coordinate] autorelease];


   [self.delegate pushViewController:vc animated:YES];

   }
 }
        else {
             [self showSiteDetails:site.identifier];
             }
}
 else if (// if right accessor cross image is clicked)
{
  // Then here the code to dismiss the pop up and annotation pin on map

}
}

Solution

  • You can check this code:

    use tags in the above method and control tag to get that tag working below..

     annView.leftCalloutAccessoryView.tag=1;
            annView.rightCalloutAccessoryView.tag=2;
    
    
    
    - (void) mapView:(MKMapView *)mv annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
    {
        SiteAnnotation *site = (SiteAnnotation *)view.annotation;
    
    
        // Left Accessory Button Tapped
    
        if(site.category == -1) {
    
    
            if ([control tag] == 1) {
    
    
                if(addressAnnotation) {
    
    so on...
    }
    

    next try

    else if ([control tag] == 2) {
    
                // "Right Accessory Button Tapped
    
    
                UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"" message:@"Touch and hold the pin icon to drag it around." delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Done", nil];
                [alert1 show];
                [alert1 release];
            }
    

    then in the method

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    
    {
    
     UIAlertView *alert_pin = [[UIAlertView alloc] initWithTitle:@"" message:@"cancel button click it " delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Done", nil];
    
                    [alert_pin show];
                    [alert_pin release];
    
                    [mapView removeAnnotation:addressAnnotation];
                    [addressAnnotation release];
                    addressAnnotation = nil;
    
                }
    

    use alert and ask user to dismiss it or not rather using direct dismiss button on callout only.