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

Ich habe eine MKMapView (auch ein UIPopoverControllerDelegate) mit Anmerkungen. Diese MapView hat, in der MKTestMapView.h - Datei, eine UIPopoverController* popoverController definiert in der @interface und eine @property (nonatomic, retain) UIPopoverController* popoverController; definiert, die außerhalb der @interface Abschnitt. Dieser controller ist @synthesized im MKTestMapView.m Datei und es erscheint in der - (void)dealloc Abschnitt. Die Anmerkungen in diesem MapView haben rightCalloutAccessoryViews definiert, um die folgenden:

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


...

}

Hier kommt nun der lustige Teil. Zunächst, ich bin nicht sicher, ob ich brauche maximumLabelSize und die rect auf die gleiche Größe. Ich bin neu in der popovercontroller also ich Spiele das nach Gehör..

Okay, das popover zeigt. Jetzt zu verwerfen. Ich kann Sie überall auf mapView2 und das popover geht Weg...aber ich muss der Benutzer auf eine Schaltfläche in der Ansicht-wenn Sie etwas ändern. URGH!

Den docs zeigen:

Entlassen ein popover programmgesteuert,
rufen Sie die dismissPopoverAnimated:
Methode der den popover-controller.

Gut, hier ist das problem: Durch die definition, wie die popoverController funktioniert, Sie klicken innen der Blick auf die popover angezeigt (klicken Sie auf die Schaltfläche), haben aber zum auslösen der dismissPopoverAnimated: - Methode des Controllers, die gestartet diesem popover view, in meinem Fall, die popoverController innerhalb der MKTestMapView.m Datei.

Nun, nachdem alles gesagt, dass, denken Sie daran, [popoverController release] nicht der Fall, bis:

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

So, ich habe gerade die folgenden im inneren der Taste (chaotisch, aber arbeiten kann):

(Vorausgesetzt, meine popover view ist ein TableView) In:

- (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 dabei die oben gibt mir ein reference (wenn es so etwas gibt) um die bestehenden Sicht, die auf dem Bildschirm -- und deshalb der Ansicht ist, dass der Besitzer des popoverController. Wenn es so einfach ist

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

Schieß ich mich cos ich glaube nicht, dass dies die richtige syntax entweder!

Dieser sollte einfach sein...aber ich bin verloren. (wahrscheinlich nur frustriert mit so vielen iPad-Unterschiede, die ich Lerne).

Kann das jemand genauer erklären?

InformationsquelleAutor Jann | 2010-04-14
Schreibe einen Kommentar