右侧的CalloutAccessory按钮未显示

时间:2012-06-17 07:55:02

标签: ios5 mkmapview mkannotation mkannotationview

我尝试管理注释,并在选择PIN时在视图右侧显示信息按钮,我的相关代码如下:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation {

    MKPinAnnotationView *newAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"greenPin"];

        if ([annotation isKindOfClass:[ManageAnnotations class]]) {
            static NSString* identifier = @"ManageAnnotations";   

            MKPinAnnotationView *newAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
            if (newAnnotation==nil) {
                newAnnotation=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
            }else {
                newAnnotation.annotation=annotation;
            }

            newAnnotation.pinColor = MKPinAnnotationColorGreen;
            newAnnotation.animatesDrop = YES;
            newAnnotation.canShowCallout = YES;
            newAnnotation.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeInfoLight];

            return newAnnotation;


        }else {
            newAnnotation.pinColor = MKPinAnnotationColorGreen;
            newAnnotation.animatesDrop = YES;
            newAnnotation.canShowCallout = YES;
            return newAnnotation;
        }

ManageAnnotations.m:

@implementation ManageAnnotations

@synthesize pinColor;
@synthesize storeName=_storeName;
@synthesize storeAdress=_storeAdress;
@synthesize coordinate=_coordinate;


-(id)initWithTitle:(NSString*)storeName adress:(NSString*)storeAdress coordinate:(CLLocationCoordinate2D)coordinate{

    if((self=[super init])){
        _storeName=[storeName copy];
        _storeAdress=[storeAdress copy];
        _coordinate=coordinate;

    }
    return self;

}
-(NSString*)title{

    return _storeName;
}
-(NSString*)subtitle{

    return _storeAdress;


}

ManageAnnotations.h

@interface ManageAnnotations : NSObject<MKAnnotation>{

    NSString *_storeName;
    NSString *_storeAdress;
    CLLocationCoordinate2D _coordinate;

}
//
@property(nonatomic,assign)MKPinAnnotationColor pinColor;
@property(nonatomic, readonly, copy)NSString *storeName;
@property(nonatomic, readonly, copy)NSString *storeAdress;
@property(nonatomic,readonly)CLLocationCoordinate2D coordinate;



//
-(id)initWithTitle:(NSString*)storeName adress:(NSString*)storeAdress coordinate:(CLLocationCoordinate2D)coordinate;
//

PINS在地图上正确显示,但没有视图右侧的信息按钮。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

  1. 你真的进入了这个状况吗?设置断点进行检查。
  2. 在您知道注释类型之前,为什么要在开头创建MKPinAnnotationView?
  3. 您应该将annotationView出列而不是alloc / initWithAnnotation:reuseIdentifier
  4. 当您重复使用注释时,您应该在alloc init之后放置所有不会更改的内容(颜色,动画等),而不是一直重置它们。否则你就失去了重用的兴趣。
  5. 除了你的代码似乎很好,并将它与我的相比,我没有看到任何明显的。备注1是最可能的。我会设置一个断点,看看我是否真的去那里,看看我是否可以显示一个leftCalloutAccessoryView,使用不同的pinColor。