2012-12-18 2 views
0

Button on the calloutViewUIButton ne parviennent pas à être cliqué sur le calloutView de l'annotation

the structure of my calloutView

Le problème que je rencontrais: je clique sur le bouton, mais il semble que le CalloutView reçu mon clic au lieu du UIButton.

Quelques explications d'abord: 1.Le « SYSUMyAnnoCalloutView » est un 2.Le MKPinAnnotationView « SYSUMyCalloutImageView » est un UIImageView, que j'init et addSubview sur la « SYSUMyAnnoCalloutView » 3. la UIButton et la UILabel a été addSubviewed dans le " SYSUMyCalloutImageView »

code correspondant: 1. Dans le "SYSUMyAnnoCalloutView.m"

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
if (selected){ 
    [self.calloutImageView setFrame:CGRectMake(-75, -100, 230, 130)]; 

    [self animateCalloutAppearance]; 
    //[self.calloutImageView becomeFirstResponder]; 
    //[self.calloutImageView.detailButton addTarget:self.calloutImageView action:@selector(clickForDetail) forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview:self.calloutImageView]; 
    [self setCanShowCallout:NO]; 
} 
else 
{ 
    //Remove your custom view... 
    [self.calloutImageView removeFromSuperview]; 
} 
} 
  1. Dans le "SYSUMyCalloutImageView.m"

    - (id)initWithImage:(UIImage *)image 
    { 
    self = [super initWithImage:image]; 
    if (self){ 
        //Label 
    CGRect boundsForLabel; 
    boundsForLabel.origin.x = 20; 
    boundsForLabel.origin.y = 50; 
    boundsForLabel.size.width = self.bounds.size.width - 100; 
    boundsForLabel.size.height = 20; 
    self.messageLabel = [[UILabel alloc] initWithFrame:boundsForLabel]; 
    self.messageLabel.backgroundColor = [UIColor clearColor]; 
    [self addSubview:self.messageLabel]; 
    //detailButton 
    CGRect buttonRect; 
    buttonRect.origin.x = 20; 
    buttonRect.origin.y = 80; 
    buttonRect.size.width = boundsForLabel.size.width-50; 
    buttonRect.size.height = 30; 
    self.detailButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [self.detailButton setFrame:buttonRect]; 
    [self.detailButton setTitle:@"Click for detail" forState:UIControlStateNormal]; 
    self.detailButton.userInteractionEnabled = YES; 
    //[self.detailButton addTarget:self.superview action:@selector(clickForDetail) forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview:self.detailButton]; 
    

    } retour auto; }

Quelqu'un pourrait-il résoudre mon problème? sera vraiment apprécier que :)

Répondre

1

par défaut un UIImageView n'accepte pas les interactions de l'utilisateur.

Vous devriez essayer d'ajouter cette ligne de code dans le initWithImage de votre SYSUMyCalloutImageView.m

[self setUserInteractionEnabled:YES]; 
+0

merci pour votre conseiller. cela fonctionne! :) – JackieLam

+1

n'oubliez pas de cliquer sur la coche pour définir cette réponse comme votre réponse acceptée :) – howanghk

Questions connexes