Travailler avec @selector
mac_manu
Membre
Une petite question toute bête. J'utilise dans mon code pour un timer un sélecteur.
Comment, si c'est possible, envoyer un paramètre? Dans mon exemple:
@selector(enabledMotifsCheckBoxPrimaire
et il me faudrait envoyer une fois YES, et une autre fois NO.
Merci pour vos enseignements...
Comment, si c'est possible, envoyer un paramètre? Dans mon exemple:
@selector(enabledMotifsCheckBoxPrimaire
et il me faudrait envoyer une fois YES, et une autre fois NO.
Merci pour vos enseignements...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
.
- (void)controlTextDidBeginEditing:(NSNotification *)aNotification
{
NSNumber *param;
if ([aNotification object] == listeMotifsPrimaire) {
param=[NSNumber numberWithBool:YES];
timer = [[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(prepareToCheckMotif
userInfo:param
repeats:YES] retain];
NSLog(@Commencer);
}
else if ([aNotification object] == listeMotifsCP) {
param=[NSNumber numberWithBool:NO];
timer = [[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(prepareToCheckMotif
userInfo:param
repeats:YES] retain];
NSLog(@Commencer);
}
}
mais il s'initie seulement si je tappe un caractère... Dès lors, lors du passage au prochain responder, comme le Timer n'est pas initialisé et que je je fais:
if ([timer isValid]) {
[timer invalidate];
[timer release];
NSLog(@Arrêter);
}
dans le controlTextDidEndEditing: , le programme bug.
du moins, je pense que ce bug vient de là ...
Donc je te conseille plutôt :
ou même directement :
Pour l'histoire du textField qui réagirai lorsque l'on clique, étant donné que celui-ci descend de NSControl, tu peux faire une sous-classe de ton textField et implémenter :
Mais il doit sûrement y avoir plus simple
Plus simple, apparemment non, car il n'y a pas de méthode toute faites. D'autre part le changement de responder se fait aussi lors d'une tabulation ou d'un return. Je pense que le mieux est de détecter la fin d'édition dans un textfield (méthode control:textShouldEndEditing:), et ensuite de récupérer le nextResponder du control dont l'édition se termine.