没有调用viewForAnnotation(iOS noob)

时间:2013-07-01 11:00:43

标签: ios objective-c mkmapview mkpinannotationview

我知道其他人之前已经问过这个问题,之前我已经在这个论坛上看过了,但到目前为止,我已经尝试了所有提议的方法,所以我决定发布这个问题。

我在下面有这段代码,用于更改MKMapView上的图钉图标。然而,viewForAnnotation函数似乎甚至没有被MKMapView调用。人们说他们在将函数委托给文件所有者时遇到了一些问题,可以通过将.xib文件中的地图视图拖动到文件所有者或定义myMap.delegate = self来完成。我已经做了两种方式,但仍然一无所获。

非常感谢我对我的问题的任何帮助,谢谢。

CODE:

- (MKPinAnnotationView*)myMap:(MKMapView*)myMap viewForAnnotation:(id<MKAnnotation>)annotation{

    MKPinAnnotationView *pin = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"CustomPin"];

    UIImage *icon = [UIImage imageNamed:@"bustour.png"];
    UIImageView *iconView = [[UIImageView alloc] initWithFrame:CGRectMake(8,0,32,37)];

    if(icon == nil)
        NSLog(@"image: ");
    else
        NSLog(@"image: %@", (NSString*)icon.description);

    [iconView setImage:icon];
    [pin addSubview:iconView];
    pin.canShowCallout = YES;
    pin.pinColor = MKPinAnnotationColorPurple;

    return pin;
}

DELEGATION enter image description here

3 个答案:

答案 0 :(得分:4)

您的委托方法被错误地命名为myMap:viewForAnnotation:

viewForAnnotation委托方法 必须 命名为mapView:viewForAnnotation:,如下所示:

- (MKAnnotationView *)mapView:(MKMapView *)mapView 
            viewForAnnotation:(id < MKAnnotation >)annotation
{
    //code goes here...
}

地图视图将查找确切的方法名称 如果没有找到,它将不会调用它,而是会创建一个默认的红色引脚。


您可以更改内部参数的名称,但不能更改方法名称。

例如,这也可以:

- (MKAnnotationView *)mapView:(MKMapView *)myMap 
            viewForAnnotation:(id < MKAnnotation >)annotation
{
    //code goes here...
}

答案 1 :(得分:0)

在您的.h课程中导入bellow课程。

#import <MapKit/MapKit.h>

并在此类中添加MKMapViewDelegate,如下所示......

@interface PTAViewController : UIViewController<MKMapViewDelegate>{

  ///...... your code..

}

@end

答案 2 :(得分:0)

据我了解,你设置插座,而不是委托。设置委托就像这样:enter image description here