DismissPopoverAnimated auf dem iPad mit UIPopoverController in MKMapView (SDK3.2)

Ich habe ein MKMapView (auch ein UIPopoverControllerDelegate) mit Anmerkungen. Diese MapView hat im MKTestMapView.h Datei AUIPopoverController* popoverController in der @Schnittstelle definiert und ein@property (nonatomic, retain) UIPopoverController* popoverController; definiert außerhalb des@interface Sektion. Dieser Controller ist@synthesized in dem MKTestMapView.m -Datei und es wird in der @ veröffentlic- (void)dealloc Sektion. Die Anmerkungen in dieser MapView habenrightCalloutAccessoryViews ist wie folgt definiert:

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


...

}

Nun kommt hier der lustige Teil. Zunächst bin ich mir nicht sicher, ob ich @ braucmaximumLabelSize und dierect gleich groß sein. Ich bin neu in der Popover-Steuerung, also spiele ich das nach Gehör.

Okay, das Popover zeigt. Nun zur Entlassung. Ich kann auf mapView2 überall klicken, und das Popover wird ausgeblendet. Der Benutzer muss jedoch auf eine Schaltfläche in der Ansicht klicken, wenn er Änderungen vornimmt. URGH!

Die Dokumente zeigen:

Um ein Popover programmgesteuert zu schließen, rufen Sie die dismissPopoverAnimated: -Methode des Popover-Controllers auf.

Nun, hier ist das Problem: Per Definition der Funktionsweise des popoverControllers klicken Sie aufInnerhal die Ansicht des angezeigten Popovers (um auf die Schaltfläche zu klicken), müssen aber das @ auslösdismissPopoverAnimated: Methode der Steuerung, die launch Diese Popover-Ansicht, in meinem Fall, diepopoverController innerhalb des MKTestMapView.m Datei

Nun, nachdem du das alles gesagt hast, denk dran,[popoverController release] passiert erst:

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

Also, mache ich einfach folgendes innerhalb des Buttons (chaotisch, kann aber funktionieren):

(Angenommen, meine Popover-Ansicht ist eine TableView) In der:

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

Hier ist mein Problem: Ich kann nicht herausfinden, ob mir das oben Genannte ein @ gibreference (wenn es so etwas gibt) zumbestehende view, das auf dem Bildschirm angezeigt wird - und daher die Ansicht, die der Eigentümer dieses popoverControllers ist. Wenn es so einfach ist wie

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

Ich werde mich selbst erschießen, weil ich glaube, dass das auch nicht die richtige Syntax ist!

Das sollte einfach sein ... aber ich bin verloren. (Wahrscheinlich nur frustriert über so viele iPad-Unterschiede, die ich gerade lerne).

Kann jemand mehr erklären?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage