Bonjour, 2 questions : - comment desactiver l apparition du clavier? - j'ai cree mon propre clavier avec des boutons et j'ai 2 UItextfield. COmment sélectionner un textfield, et comment savoir lequel est selectionné?
- j'ai cree mon propre clavier avec des boutons et j'ai 2 UItextfield. COmment sélectionner un textfield, et comment savoir lequel est selectionné?
Lequel est selectionné : en général les delegate method indique le textField en argument. Donc un if(textField==firstTextField) .
Sélectionner un TextField c'est le rôle de l'utilisateur de faire cela, mais autrement peut-être que les méthodes UIControl peuvent t'aider :
selected A Boolean value that determines the receiver's selected state.
@property(nonatomic, getter=isSelected) BOOL selected Discussion Specify YES if the control is selected; otherwise NO. The default is NO. For many controls, this state has no effect on behavior or appearance. But other subclasses (for example, UISwitchControl) or the application object might read or set this control state.
Avec Jekar on avait essayé d'implémenter ca. Pour le blocage du clavier j'avais reussi.
Apres pour savoir si un textField etait selectionné on testait dans chaque IBAction textField.isSelected . Si YES alors on écrivait dedans un truc. Mais ça ne marchait pas. C'est bien le même principe que tu mets en évidence ici Philippe?
Apres pour savoir si un textField etait selectionné on testait dans chaque IBAction textField.isSelected . Si YES alors on écrivait dedans un truc. Mais ça ne marchait pas. C'est bien le même principe que tu mets en évidence ici Philippe?
Effectivement la property selected pour un UITextField a l'air verrouillée à l'essai. Il faut se débrouiller avec enabled.
Ok j'ai testé et ca marche super. Sauf que Jekar aimerai écrire dans deux textField différents et donc quand il appuie sur un bouton, ecrire dans le textField qu'il a sélectionné. Le soucis c'est qu'avec textField.enabled = NO ; on ne peut plus selectionner
edit : ok mais alors c'est impossible ^^. Faudrait mettre une radiobox pour savoir dans le quel on veut ecrire, ce serait plus simple. Enfin Jekar nous le dira.
Ok j'ai testé et ca marche super. Sauf que Jekar aimerai écrire dans deux textField différents et donc quand il appuie sur un bouton, ecrire dans le textField qu'il a sélectionné.
Une solution : - repérer la position d'un touch dans le view controller , avoir une variable dans ce view controller qui mémorise le textfield selectionné que l'on renseigne selon que le touch a lieu dans le premier ou le second text field.
Plus propre : - sous-classer UITextField et rendre active la property selected avec la réaction au touch. On implémentera dans cette sous-classe le touchesBegan: withEvent: cette deuxième solution est plus propre mais demande d'envoyer au delegate (le view controller sans doute) un message comme quoi le textField vient d'être sélectionné. A lui de déselectionner l'autre textfield en réponse à ce message.
[EDIT] ça ne marchera pas à cause du conflit avec le keyboard, voir plus loin
Pour la première solution il faut connaà®tre la position et taille du textField ? Je sais pas si j'ai bien compris. En fait ton textField deviendrai comme un simple dessin rectangulaire.
Pour la première solution il faut connaà®tre la position et taille du textField ? Je sais pas si j'ai bien compris. En fait ton textField deviendrai comme un simple dessin rectangulaire.
Les text fields sont sans doute en IBOutlet du view controller, donc on connaà®t leur frame. DOnc on teste si la "location" du touch est dans ce rectangle. Mais je préfère la deuxième solution, plus propre et réutilisable.
Réponses
-(BOOL) textFieldShouldreturn:(UITextField *) textField {
[textField resignFirstResponder];
....
}
Lequel est selectionné : en général les delegate method indique le textField en argument. Donc un if(textField==firstTextField) .
Sélectionner un TextField c'est le rôle de l'utilisateur de faire cela, mais autrement peut-être que les méthodes UIControl peuvent t'aider :
selected
A Boolean value that determines the receiver's selected state.
@property(nonatomic, getter=isSelected) BOOL selected
Discussion
Specify YES if the control is selected; otherwise NO. The default is NO. For many controls, this state has no effect on behavior or appearance. But other subclasses (for example, UISwitchControl) or the application object might read or set this control state.
Pour le blocage du clavier j'avais reussi.
Apres pour savoir si un textField etait selectionné on testait dans chaque IBAction
textField.isSelected . Si YES alors on écrivait dedans un truc. Mais ça ne marchait pas.
C'est bien le même principe que tu mets en évidence ici Philippe?
Ah oui si j'ai mal compris et que tu veux que le text field ne présente pas le key board
textField.enabled=NO;
Effectivement la property selected pour un UITextField a l'air verrouillée à l'essai. Il faut se débrouiller avec enabled.
Sauf que Jekar aimerai écrire dans deux textField différents et donc quand il appuie sur un bouton, ecrire dans le textField qu'il a sélectionné.
Le soucis c'est qu'avec textField.enabled = NO ; on ne peut plus selectionner
edit : ok mais alors c'est impossible ^^. Faudrait mettre une radiobox pour savoir dans le quel on veut ecrire, ce serait plus simple. Enfin Jekar nous le dira.
Une solution :
- repérer la position d'un touch dans le view controller , avoir une variable dans ce view controller qui mémorise le textfield selectionné que l'on renseigne selon que le touch a lieu dans le premier ou le second text field.
Plus propre :
- sous-classer UITextField et rendre active la property selected avec la réaction au touch. On implémentera dans cette sous-classe le touchesBegan: withEvent:
cette deuxième solution est plus propre mais demande d'envoyer au delegate (le view controller sans doute) un message comme quoi le textField vient d'être sélectionné. A lui de déselectionner l'autre textfield en réponse à ce message.
[EDIT] ça ne marchera pas à cause du conflit avec le keyboard, voir plus loin
Les text fields sont sans doute en IBOutlet du view controller, donc on connaà®t leur frame. DOnc on teste si la "location" du touch est dans ce rectangle. Mais je préfère la deuxième solution, plus propre et réutilisable.
je vais essayer tout ca!
Dans MyTextField.h
@interface MyTextField : UITextField {
BOOL selected;
}
@property BOOL selected;
@end
Dans MyTextField.m
@synthesize selected;
- (BOOL)becomeFirstResponder {
NSLog(@%@",self.delegate);
selected=!selected;
[self.delegate performSelector:@selector(selectionChangedFor withObject:self];
// [super becomeFirstResponder]; lance le mécanisme du keyboard
return YES;
}
Dans le delegate :
-(void) selectionChangedFor:(UITextField *) aTextField {
NSLog(@appel de selectionChangedFor);
}
[EDIT] il serait par ailleurs plus prudent de faire précéder
[self.delegate performSelector:@selector(selectionChangedFor withObject:self];
par un test if([self.delegate respondsToSelector:@selector(selectionChangedFor])