我正在尝试完成cs193p(link)的作业5的最后一部分
该应用程序从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");
}
我问过的所有其他问题都证明我做了一些愚蠢的事情,我希望这就是这种情况。但我一直坐着看着它多年,看不到它!
感谢您的见解!
答案 0 :(得分:2)
事实证明,在didSelectAnnotationView中添加按钮为时已晚!
我以为我试图通过不创建按钮来提高效率,除非有人实际选择了注释,但事实证明(出于某种原因?)如果按钮是在didSelectAnnotationView中创建的,则它不会触发委托方法。
我已将其移至viewForAnnotation方法,它可以正常工作!