Cómo descartar PopoverAnimated en iPad con UIPopoverController en MKMapView (SDK3.2)

Tengo un MKMapView (también un UIPopoverControllerDelegate) con anotaciones. Este MapView tiene, en elMKTestMapView.h presentar unUIPopoverController* popoverController definido en la @interface y una@property (nonatomic, retain) UIPopoverController* popoverController; definido fuera de la@interface sección. Este controlador es@synthesized en elMKTestMapView.m archivo y se publica en el- (void)dealloc sección. Las anotaciones en este MapView tienenrightCalloutAccessoryViews definido a lo siguiente:

- (void)mapView:(MKMapView *)mapView2 annotationView:(MKAnnotationView *)aview calloutAccessoryControlTapped:(UIControl *)control{

...

CGPoint leftTopPoint = [mapView2 convertCoordinate:aview.annotation.coordinate toPointToView:mapView2];

int boxDY=leftTopPoint.y;
int boxDX=leftTopPoint.x;
NSLog(@"\nDX:%d,DY:%d\n",boxDX,boxDY);

popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
popoverController.delegate = self;
CGSize maximumLabelSize = CGSizeMake(320.0f,600.0f);

popoverController.popoverContentSize = maximumLabelSize;

CGRect rect = CGRectMake(boxDX, boxDY, 320.0f, 600.0f);

[popoverController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];


...

}

Ahora aquí viene la parte divertida. En primer lugar, no estoy seguro si necesitomaximumLabelSize y elrect ser del mismo tamaño Soy nuevo en popovercontroller, así que estoy jugando esto de oído.

De acuerdo, el popover muestra. Ahora a descartarlo. Puedo hacer clic en cualquier lugar en mapView2 y el popover desaparece ... pero necesito que el usuario haga clic en un botón en la vista si cambian algo. URGH!

Los documentos muestran:

Para descartar un popover mediante programación, llame al método despedsPopoverAnimated: del controlador popover.

Bueno, aquí está el problema: por definición de cómo funciona popoverController, estás haciendo clicdentro la vista del popover mostrado (para hacer clic en el botón) pero tiene que activar eldismissPopoverAnimated: método del controlador quelanzado esta vista de popover, en mi caso, lapopoverController dentro deMKTestMapView.m archivo.

Ahora, habiendo dicho todo eso, recuerda:[popoverController release] no sucede hasta que:

- (void)dealloc {
 [popoverController release];
 [mapView release];
    [super dealloc];
}

Entonces, ¿solo hago lo siguiente dentro del botón (desordenado pero puede funcionar):

(Suponiendo que mi vista de popover es un TableView) En:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MKTestMapView * mKTestMapView = [[MKTestMapView alloc] init];
[[mKTestMapView popoverController].dismissPopoverAnimated:YES];
}

Aquí está mi problema: no puedo entender si hacer lo anterior me da unreference (si hay tal cosa) a laexistente vista que está en la pantalla y, por lo tanto, la vista que es propietaria de ese popoverController. Si es tan simple como

[[[self parentView] popoverController].dismissPopoverAnimated:YES];

Me pegaré un tiro porque tampoco creo que sea la sintaxis correcta.

Esto debería ser fácil ... pero estoy perdido. (probablemente solo frustrado con tantas diferencias iPad que estoy aprendiendo).

¿Alguien puede explicar más?

Respuestas a la pregunta(2)

Su respuesta a la pregunta