How do I display a UIPopoverView as a annotation to the map view? (iPad)

后端 未结 4 1013
轻奢々
轻奢々 2020-11-29 17:24

On the maps app in the IPad when you tap a pin you get a normal annotation with an \"i\" instead of a disclosure indicator. A further tap on the \"i\" reveals a popover view

4条回答
  •  有刺的猬
    2020-11-29 18:03

    First add an annotation to the map and in the viewForAnnotation method, set the rightCalloutAccessoryView to a button of type, say, UIButtonTypeDetailDisclosure (I don't think the blue info button is available by default).

    Pressing the button will call the calloutAccessoryControlTapped delegate method. In this method, deselect the annotation and show your popover. For example:

    - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
    {
        [mapView deselectAnnotation:view.annotation animated:YES];
    
        YourContentViewController *ycvc = [[YourContentViewController alloc] init...
        UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:ycvc];
        [ycvc release];
    
        //hold ref to popover in an ivar
        self.annotationPopoverController = poc;
    
        //size as needed
        poc.popoverContentSize = CGSizeMake(320, 400);
    
        //show the popover next to the annotation view (pin)
        [poc presentPopoverFromRect:view.bounds inView:view 
            permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    
        [poc release];
    }
    

    YourContentViewController is a subclass of UIViewController which you can code like any other view controller. The Maps app looks like it has UITableView in the content.

提交回复
热议问题