我已经在StackOverflow中检查了很多问题但是没有一个能为我工作。
我正在开发一个iPad应用程序。我在Storyboard中创建了所有接口。
对于我的项目,我创建了一个视图控制器和相应的.h .m文件并将它们链接起来。然后我在视图控制器中添加了MKMapView,然后使用Interface Builder在视图控制器文件中引用了mapView。我创建了一堆点并在地图上显示它们。
在我决定改变针脚颜色之前,一切都很完美。我在Apple Developer网站上关注了MapCallout示例。然后我创建了自定义注释点类,如下所示
CustomMKAnnotation.h文件
@interface CustomMKAnnotation : NSObject <MKAnnotation>
{}
CustomMKAnnotation.m文件
@implementation CustomMKAnnotation
- (NSString *)title {return @"title";}
- (NSString *)subtitle{return @"subtitle";}
- (CLLocationCoordinate2D)coordinate;{
CLLocationCoordinate2D theCoordinate;
theCoordinate.latitude = some latitude;
theCoordinate.longitude = some longitude;
return theCoordinate;
}
@end
这是我的viewcontroller类
MapHolderViewController.h文件
@interface MapHolderViewController : UIViewController<MKMapViewDelegate>
{
NSMutableArray *mapAnnotations;
}
@property (nonatomic,retain) IBOutlet MKMapView *myMap;
@property (nonatomic, retain) NSMutableArray *mapAnnotations;
-(void) addLatLong;
@end
MapHolderViewController.m文件
@implementation MapHolderViewController
@synthesize myMap;
@synthesize mapAnnotations;
-(void) addLatLong{
// I am adding annotations here
}
- (MKAnnotationView *)myMap:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// This function has never been called.
}
@end
我将MKMapView的委托出口引用到ViewController。我还设置了myMap.delegate = self;在MapHolderViewController.m文件中但它也没有工作。
欢迎任何见解。
答案 0 :(得分:1)
问题似乎是你的委托方法没有正确命名。
您已经编写了这样的委托方法:
- (MKAnnotationView *)myMap:(MKMapView *)mapView
viewForAnnotation:(id <MKAnnotation>)annotation
所以你的方法是myMap:viewForAnnotation:
。
正确的标题是:
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id < MKAnnotation >)annotation
方法名称必须为mapView:viewForAnnotation:
。
您可以更改参数名称(参数类型后面的名称),但不能更改属于方法名称的参数类型前面的部分。
例如,这样就可以了:
- (MKAnnotationView *)mapView:(MKMapView *)myMap
viewForAnnotation:(id < MKAnnotation >)annotation