Como dispensarPopoverAnimated no iPad com UIPopoverController no MKMapView (SDK3.2)

Eu tenho um MKMapView (também um UIPopoverControllerDelegate) com anotações. Este MapView possui, noMKTestMapView.h arquivo, umUIPopoverController* popoverController definido na interface @ e um@property (nonatomic, retain) UIPopoverController* popoverController; definido fora do@interface seção. Este controlador é@synthesized noMKTestMapView.m arquivo e é lançado no- (void)dealloc seção. As anotações neste MapView têmrightCalloutAccessoryViews definidos para o seguinte:

- (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];


...

}

Agora vem a parte divertida. Primeiro de tudo, não tenho certeza se precisomaximumLabelSize e arect para ter o mesmo tamanho. Eu sou novo no popovercontroller, então estou jogando isso de ouvido ..

Ok, a popover mostra. Agora, para descartá-lo. Posso clicar em qualquer lugar no mapView2 e a popover desaparecerá ... mas preciso que o usuário clique em um botão na visualização, se alterar alguma coisa. URGH!

Os documentos mostram:

Para descartar um popover programaticamente, chame o método unlockPopoverAnimated: do controlador popover.

Bem, aqui está o problema: por definição de como o popoverController funciona, você está clicando emdentro a visualização do popover exibido (para clicar no botão), mas é necessário acionar odismissPopoverAnimated: método do controlador quelançado essa visão popover, no meu caso, opopoverController dentro deMKTestMapView.m Arquivo.

Agora, tendo dito tudo isso, lembre-se,[popoverController release] não acontece até:

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

Então, basta fazer o seguinte dentro do botão (confuso, mas pode funcionar):

(Supondo que minha visualização popover seja uma TableView)

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

Aqui está o meu problema: não consigo descobrir se fazer isso acima me dá umareference (se houver) para oexistir exibição que está na tela - e, portanto, a exibição que é o proprietário desse popoverController. Se é tão simples quanto

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

Vou me matar porque também não acho que seja a sintaxe correta!

Isso deve ser fácil ... mas estou perdido. (provavelmente apenas frustrado com tantas diferenças no iPad que estou aprendendo).

Alguém pode explicar mais?

questionAnswers(2)

yourAnswerToTheQuestion