2011-10-31 75 views
4

我的iPhone应用程序没有问题。我有这样的类和接口:在MKMapView rightCalloutAccessoryView不显示

CinemaMapAnnotation.h

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 

@interface CinemaMapAnnotation : NSObject <MKAnnotation>{ 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 

} 

@property (nonatomic, assign) CLLocationCoordinate2D coordinate; 
@property (nonatomic, copy) NSString* title; 
@property (nonatomic, copy) NSString* subtitle; 

-(id)initWithCoordinate:(CLLocationCoordinate2D) c; 

@end 

CinemaMapAnnotation.m

#import "CinemaMapAnnotation.h" 

@implementation CinemaMapAnnotation 

@synthesize title, subtitle, coordinate; 

-(id)initWithCoordinate:(CLLocationCoordinate2D) c{ 
    self = [super init]; 
    if (self) { 
     coordinate = c; 
    } 
    return self; 
} 

-(void) dealloc { 
    self.title = nil; 
    self.subtitle = nil; 
    [super dealloc]; 
} 


@end 

CinemasMapController.h

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
#import "Cinema.h" 
#import "CinemaMapAnnotation.h" 
#import "PopcornuaAppDelegate.h" 

@interface CinemasMapController : UIViewController <MKMapViewDelegate, MKReverseGeocoderDelegate> { 
    MKMapView *mapView; 
    MKReverseGeocoder *reverseGeokoder; 
} 

@property (nonatomic, retain) IBOutlet MKMapView *mapView; 
@property (nonatomic, retain) IBOutlet MKReverseGeocoder *reverseGeokoder; 

@end 

CinemasMapController.m

#import "CinemasMapController.h" 

@implementation CinemasMapController 

@synthesize mapView, reverseGeokoder; 

... 

#pragma mark - Map Anotation 

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id)annotation 
{ 
    static NSString* MyIdentifier = @"CinemaMapAnotation"; 
    MKPinAnnotationView* pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:MyIdentifier]; 
    if (!pinView) 
    { 
     MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc] 
               initWithAnnotation:annotation reuseIdentifier:MyIdentifier] autorelease]; 
     pinView.draggable = NO; 
     pinView.animatesDrop = NO; 
     pinView.enabled = YES; 
    } else { 
     pinView.annotation = annotation; 
    } 

    if(annotation != mapView.userLocation){ 
     pinView.pinColor = MKPinAnnotationColorRed; 
     pinView.canShowCallout = YES; 
     // Add a detail disclosure button to the callout. 
     pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     pinView.userInteractionEnabled = YES; 
    } else { 
     pinView.pinColor = MKPinAnnotationColorGreen; 
    } 
    return pinView; 
} 

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 
    NSLog(@"Not show button, so not work"); 
} 

... 

@end 

我的问题是,什么都显示和工作,除非不显示rightCalloutAccessoryView按钮。 mapView连接并在iphone视图上删除CinemasMapController(我也尝试[mapView setDelegate:self])。那么我做错了什么?

P.S.用行代码

pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

执行 - 由NSLog检查。

这里怎么了模样 - 没有按钮: How its look like - no button

回答

10

viewForAnnotation,在if (!pinView)块,一个新的本地pinView变量被宣布,而不致分配给外部变量。

因此,外部pinView变量永远不会被设置(保留nil),因此地图视图会创建默认的注释视图,这就是您所看到的。

+0

谢谢!你非常帮我! –