2012-06-17 4 views
0

Я стараюсь управлять аннотациями и отображать кнопку информации о праве просмотра, когда PIN-код выбран, мой соответствующий код заключается в следующем:Кнопка rightCalloutAccessory не показан

- (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
  1. Вы действительно входите в состояние? Установите контрольную точку для проверки.
  2. Зачем создавать MKPinAnnotationView в начале, прежде чем вы знаете тип аннотации?
  3. Вы должны свой annotationView из очереди вместо Alloc/initWithAnnotation: reuseIdentifier
  4. При повторном использовании аннотации, вы должны поместить все, что не меняется (цвет, анимация и т.д.) после Alloc инициализации, а не сбросить их всех время. В противном случае вы теряете интерес к повторному использованию.

Помимо этого, ваш код кажется прекрасным, и, сравнивая его с моим, я не вижу ничего очевидного. Замечание 1 является наиболее вероятным. Я бы установил точку останова, чтобы посмотреть, действительно ли я туда поеду, посмотрим, могу ли я показать leftCalloutAccessoryView вместо этого, используя другой pinColor.

+0

На самом деле, да, я не добираюсь туда, я пошевелил его точкой останова. Скорее всего, проблема заключается в том, что вы не вызываете метод 'viewForAnnotation', пожалуйста? – Luca

+0

Ой, я забыл назначить делегата:/Thanx для вашей помощи, проблема решена :))) – Luca

Смежные вопросы