未调用 mkmapview 委托方法 -calloutaccessorycontroltapped

Posted

技术标签:

【中文标题】未调用 mkmapview 委托方法 -calloutaccessorycontroltapped【英文标题】:mkmapview delegate method not being called -calloutaccessorycontroltapped 【发布时间】:2012-07-25 19:50:48 【问题描述】:

我正在尝试完成cs193p作业5的最后一部分(link)

该应用程序从 Flickr 中选择热门地点,并将这些地点的照片绘制在地图上。

任务 5c 说

地图上的每个注释都应该有一个标注,显示以下内容: C。一个显示按钮,显示所选照片的​​完整图像(就像用户从桌子上选择照片一样)或显示该位置的照片列表(再次,就像用户选择了那个地方从表中)。

我已经完成了前面显示标注的部分,并将缩略图加载到标注中。

我已经将我的 mapViewController 设置为 mapView 的委托,并且我知道它正在工作,因为当我单击图钉时,它会调用 didSelectAnnotationView 方法,该方法也在我的 mapViewController 中并且一切正常,并且实际上在标注中显示了披露附件。

但是,我还定义了方法 calloutAccessoryControlTapped(相同的 VC),并且不会调用此方法。完全没有。目前我刚刚在其中获得了一个 NSLog,但什么也没有出现。

好吧,我什么也不说,只是为了让它更奇怪,有一个注释适用于数百个不起作用的注释。

从一开始就有一个注释触发按钮,但没有其他任何作用。是因为它是第一个注释吗?按钮是否仅为此触发?

我想发布代码,但不确定它的相关性:

 @interface flickrthingMapViewController ()<MKMapViewDelegate>
    @property (weak, nonatomic) IBOutlet MKMapView *mapview;

    @end

    @implementation flickrthingMapViewController
    @synthesize delegate = _delegate;

    @synthesize mapview = _mapview;
    @synthesize annotations = _annotations;


    - (void)viewDidLoad
    
        [super viewDidLoad];
        self.mapview.delegate = self; //remembered to set the delegate

    
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView

    if (![aView.annotation isKindOfClass:[flickrthingPlaceAnnotation class]])
    
        UIImage *image = [self.delegate flickrthingMapViewContoller:self imageForAnnotation:aView.annotation];


        [(UIImageView *)aView.leftCalloutAccessoryView setImage:image];
    
    UIButton *buttonToViewDetails = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    aView.rightCalloutAccessoryView=buttonToViewDetails;




-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)aView calloutAccessoryControlTapped:(UIControl *)control


    NSLog(@"hello");

我问过的所有其他问题都证明我做了一些愚蠢的事情,我希望这里就是这种情况。但是我已经坐在那里看了很久,看不到它!

感谢您的见解!

【问题讨论】:

【参考方案1】:

事实证明,在 didSelectAnnotationView 中添加按钮为时已晚!

我认为我试图通过不创建按钮来提高效率,除非有人实际选择了注释,但事实证明(出于某种原因?)如果按钮是在 didSelectAnnotationView 中创建的,它不会触发委托方法。

我已将它移到 viewForAnnotation 方法中,并且可以正常工作!

【讨论】:

以上是关于未调用 mkmapview 委托方法 -calloutaccessorycontroltapped的主要内容,如果未能解决你的问题,请参考以下文章

我是不是必须在我的 MKMapview 委托上实现 mapView:regionWillChangeAnimated:?

MKMapView - 未调用 rendererForOverlay

UIPopoverController 委托委托方法未被调用

UIDocumentPickerViewController - 未调用委托方法

未调用委托方法

未调用 SWTableViewCell 委托方法