Désactiver bouton
Salut tout le monde !
Voilà j'aimerai savoir comment désactiver un bouton .
Plus précisément :
J'ai plusieurs actions a faire quand je vais cliquer sur mon bouton. J'aimerai que uqnad je clique dessus celui-ci se désactive, qu'on ne puisse plus cliquer dessus.J'ai crée mon bouton que j'ai relié à un IBAction dans IB. Comment faire apres dans ma fonction :
- (IBAction)monActionDeBouton {
DESACTIVATION
// MON CODE
RE-ACTIVATION
}
Merci ^^
Voilà j'aimerai savoir comment désactiver un bouton .
Plus précisément :
J'ai plusieurs actions a faire quand je vais cliquer sur mon bouton. J'aimerai que uqnad je clique dessus celui-ci se désactive, qu'on ne puisse plus cliquer dessus.J'ai crée mon bouton que j'ai relié à un IBAction dans IB. Comment faire apres dans ma fonction :
- (IBAction)monActionDeBouton {
DESACTIVATION
// MON CODE
RE-ACTIVATION
}
Merci ^^
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Puis dans le fichier d'interfaçage (.h) de ton controleur, tu déclares cet outlet :
IBOutlet UIButton *monBouton;
Par contre ce n'est pas :
[monBouton enabled]
mais :
[monBoutton setEnabled:YES]
Un truc bizar c'est qu'au début de mon code je mets
[monBouton setEnabled:NO]
mon code apres (qui est un boucle for )
puis [monBouton setEnabled:YES]
Pendant que je vosi la boucle for s'executer je vois bien que le bouton est inactif (en noir) mais si je clique dessus pendant la boucle, une fois que celle-ci est terminée et que mon bouton redevient donc active eh bien ma je re rentre dans mon action de bouton ... Pourquoi donc ?
C'est plus que normal, le temps d'exécution de ta boucle est sans doute très inférieure à la durée d'appui du doigt sur le bouton de la souris. Quel problème cela te pose-t-il ?
• Animations successives sur le même CALayer
• Succession de flash
Par ailleurs la rubrique de ton post serait plutôt Frameworks Graphiques (graphisme, animations, OPENGL)
Enfin je me trompe sans doute :-\\
1. Désactiver le bouton
2. Lancer l'animation
3. Attendre que l'animation soit finie pour réactiver le bouton
Les points 1. et 2. se font dans la méthode - (IBAction)monActionDeBouton:(id) sender
Le point 3. se fait dans la méthode du delegate appelée lorsque l'animation a pris fin.
Il faut comprendre qu'une animation est un thread, c'est à dire du code exécutable qui s'exécute en parallèle du code principal. Ainsi, quand tu lances ton animation, deux codes (et plus en fait) s'exécutent simultanément, et les instructions après ta boucle for sont exécutées en même temps que l'animation.
Une solution est d'attendre la fin du thread d'animation pour faire les mises à jour de l'interface.
Si tu utilises une CAAnimation
• Déclarer le delegate par  monAnimation.delegate=self (self par exemple)
• Implémenter la méthode -(void) animationDidStop: finished: dans le .m du delegate.
Si tu utilises [UIView beginAnimations: context: ],
• Déclarer le delegate par la méthode setAnimationDelegate
• Déclarer le nom de la méthode par setAnimationDidStopSelector
• Implémenter une méthode nomAuChoix:(NSString*)animationIdentifier finished:(BOOL) flag context:(void*)context
et .. consulte la doc
Et c'est donc dans la fonction -(void) animationDidStop:finished: que je met : [monBouton setEnabled:YES] ?
J'ai mis dans ma boucle le monAnim.delegate = self
Mais -(void) animationDidStop:finished: pose probleme au compilateur. De plus si dans mon delegate je met
[monBouton setEnabled:YES] il va me dire qu'il ne connait pas 'monBouton'. Je dois le déclarer une seconde fois dans mon delegate.h ?
Vous avez dit synthaxe ? ou ortograff ?
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
C'est self qui reçoit le message et à priori self connaà®t le bouton, puisque c'est lui qui possède la méthode qui lance l'animation.
Il n'y a pas à créer de Delegate.h. Le delegate est un objet quelconque, mais la plupart du temps c'est le contrôleur déclenchant l'animation qui joue ce rôle.
Par contre pour 'monBouton' il ne compile pas et me dit: 'undeclared first use in this founction'
Vais devoir m'améliorer en orthographe ^^
syntax et function
Vais devoir m'améliorer en orthographe ^^
[/quote]
Mar quand je vais dans mon fichir delegate il me met cette erreur. Il faut refaire la même démarche?
p.s : sorry pour l'ortho ....
@interface monfichier.m
IBOutlet UIButton * monBouton;
@end
@implementation monfichier.m
- (IBAction)monActionDeBouton:(id)sender {
[monBouton setEnabled:NO];
// lancer l'animation
animation.delegate=self;
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
 [monBouton setEnabled:YES];
}
Bon ca ne marche pas mais je vais essayer de voir ca