2010-07-09 5 views
3

Je suis bloqué sur le code suivant. Comment ma classe UIButton Extended ne peut pas afficher ou masquer un UIImageViewUIButton personnalisé ne peut pas interagir avec UIImageView lié

Mes méthodes sont appelées et l'imageview n'est pas nulle.

Voici le code:

@interface UILinkedImageButton : UIButton { 
    IBOutlet UIImageView *linkImageView; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *linkImageView; 

@end 

#import "UILinkedImageButton.h" 

@interface UILinkedImageButton() 
- (void)showImage; 
- (void)hideImage; 
@end 
------------------------------------------------------------------------------------------------- 

@implementation UILinkedImageButton 


@synthesize linkImageView; 

- (void) dealloc{ 

    [linkImageView release], linkImageView = nil; 
    [super dealloc]; 
} 

- (id) initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 

    if(self){ 
     [self addTarget:self action:@selector(showImage) forControlEvents:UIControlEventTouchDown]; 
     [self addTarget:self action:@selector(hideImage) forControlEvents:UIControlEventTouchUpInside]; 
     [self addTarget:self action:@selector(hideImage) forControlEvents:UIControlEventTouchUpOutside]; 
    } 

    return self; 
} 

- (void)showImage 
{ 
    if(self.imageView){ 
     NSLog(@"UILinkImageButton - showImage - currentStatus: %@", self.imageView); 
     self.imageView.hidden = NO; 
     [self.superview layoutIfNeeded]; 
    } 
} 

- (void)hideImage 
{ 
    if(self.imageView){ 
     NSLog(@"UILinkImageButton - hideImage"); 
     self.imageView.hidden = YES; 
    } 
} 

@end 
+0

Normalement, j'attendre de ces actions à vivre dans le contrôleur, pas le bouton. Ensuite, vous devez définir les actions du bouton soit dans Interface Builder ou dans votre contrôleur de vue (probablement dans -loadView); –

+0

Eh bien, les fonctions sont appelées, je peux les voir dans le journal. Mais tous les changements à l'imageview liée n'apparaîtront pas. – rckoenes

+0

Votre hiérarchie UIImageView est-elle visible dans la vue? Peut-être avez-vous oublié de le lier avec IB ou ce n'est pas une sous-vue de la vue des parents? (de cette façon, l'objet sera alloué, mais pas de vue visible, bien sûr) – kpower

Répondre

2

Comme Thomas Müller mentionne dans le commentaire, je pense aussi, les actions devraient être dans le contrôleur. En dehors de cela, dans votre code vous modifiez la propriété cachée de l'objet 'imageView' alors que la vue d'image personnalisée que vous avez créée dans votre déclaration est 'linkImageView'. Le code ne génère pas d'erreur car 'imageView' est la propriété readonly du bouton déclarée dans UIButton et représente la vue d'image du bouton et non votre lienImageView.

Espérons que cela aide.

Merci, Swapnil

+0

Merci c'est bien le temps chaud c'est pourquoi je n'ai pas vu cette erreur. Aussi, je suis d'accord que ces méthodes devraient être dans le contrôleur. Sauf que j'ai besoin de cette action tant de fois et cela me fait gagner du temps. – rckoenes

Questions connexes