Как убрать PopoverAnimated на iPad с помощью UIPopoverController в MKMapView (SDK3.2)

У меня есть MKMapView (также UIPopoverControllerDelegate) с аннотациями. Этот MapView имеет вMKTestMapView.h файл,UIPopoverController* popoverController определены в @interface и@property (nonatomic, retain) UIPopoverController* popoverController; определяется за пределами@interface раздел. Этот контроллер@synthesized вMKTestMapView.m файл, и он выпущен в- (void)dealloc раздел. Аннотации в этом MapView имеютrightCalloutAccessoryViewопределяется следующим:

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


...

}

Теперь вот самое интересное. Прежде всего, я не уверен, что мне нужноmaximumLabelSize иrect быть одинакового размера. Я новичок в popovercontroller, поэтому я играю это на слух ..

Хорошо, поповер показывает. Теперь чтобы отклонить это. Я могу щелкнуть в любом месте на mapView2, и всплывающее окно исчезнет ... но мне нужно, чтобы пользователь щелкнул кнопку в представлении, если они что-то изменят. Urgh!

Документы показывают:

Чтобы программно закрыть поповер, вызовите метод dismissPopoverAnimated: контроллера всплывающего окна.

Ну, вот проблема: по определению, как работает popoverController, вы нажимаетевнутри вид отображаемого всплывающего окна (чтобы нажать кнопку), но должен вызватьdismissPopoverAnimated: метод контроллера, которыйзапущенный это представление поповера, в моем случае,popoverController внутриMKTestMapView.m файл.

Теперь, сказав все это, помните,[popoverController release] не произойдет, пока:

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

Итак, я просто делаю следующее внутри кнопки (грязно, но может работать):

(Предполагая, что мое представление popover является TableView) В:

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

Вот моя проблема: я не могу понять, дает ли выполнение вышеизложенного мнеreference (если есть такая вещь)существующий представление, которое находится на экране - и, следовательно, представление, которое является владельцем этого popoverController. Если это так просто, как

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

Я застрелюсь, потому что я не думаю, что это правильный синтаксис!

Это должно быть легко ... пока я потерялся. (вероятно, просто разочарован так много различий iPad, что я учусь).

Кто-нибудь может объяснить больше?

Ответы на вопрос(2)

Ваш ответ на вопрос