Supprimer les retours de charriots dans un nstextfield

syncsync Membre
04:31 modifié dans API AppKit #1
Bonjour,

J'ai un champs textes dans une application cocoa et j'aimerai empêcher la saisie de retour de chariot, tab etc... Ceci pour la saisie ainsi que la validation du nstextfield, j'imagine qu'on peut utiliser un formatter, mais y a peut etre une solution directement avec interface builder...!

merci et bonne journée

Anthony

Réponses

  • laurrislaurris Membre
    04:31 modifié #2
    Pour empêcher la saisie de certains caractères, je dirais qu'il faut utiliser le delegate

    - (BOOL)textShouldBeginEditing:(NSText *)textObject{
    // tester si textObject contient le retour charriot ... retourner NO dans ce cas.

    }

    Pour ce qui est de la validation, tu peux choisir dans IB de ne valider le champ que lorsque l'édition est terminée, donc quand il n'a plus le focus, et pas quand tu tape Enter. Si tu ne veux pas non plus qu'il se valide à  ce moment là , il faut passer par un sous-classage, je ne vois que ça.
  • syncsync Membre
    04:31 modifié #3
    J'ai trouvé ça finalement:

    -(NSString *)removeCharacters: (NSString *)toRemove;<br />{<br />&nbsp;  int i, j;<br />&nbsp;  NSMutableString *ret = [NSMutableString stringWithString:@&quot;&quot;];<br />&nbsp;  NSMutableString *work = [NSMutableString stringWithString:self];<br />&nbsp;  <br />&nbsp;  for (i = 0; i &lt; [toRemove length]; i++)<br />&nbsp;  {<br />&nbsp;  		unichar cur = [toRemove characterAtIndex:i];<br />&nbsp;  		for (j = 0; j &lt; [work length]; j++)<br />&nbsp;  		{<br />&nbsp;  			unichar cur2 = [work characterAtIndex:j];<br />&nbsp;  			if (cur != cur2)<br />&nbsp;  				[ret appendString:[NSString stringWithFormat:@&quot;%c&quot;, cur2]];<br />&nbsp;  		}<br />&nbsp;  		work = [NSMutableString stringWithString:ret];<br />		if (i != [toRemove length] - 1)<br />		&nbsp; &nbsp; ret = [NSMutableString stringWithString:@&quot;&quot;];<br />&nbsp;  }<br /><br />	return&nbsp; ret;<br />}
    


    ce qui fait que je récupère ma string d'un nstextfield et je fais le traitement en appelant la méthode du haut...
  • laurrislaurris Membre
    04:31 modifié #4
    Oui bien sûr. Dans le cas où tu veux répondre à  une autre question, selon toute logique une autre réponse s'impose. Néanmoins, dans le cas où tu veux faire ce que tu demandais dans ta question, c'est à  dire empêcher la saisie d'un caractère dans un champ de texte, la réponse est, comme précédemment indiqué:

    <br />- (BOOL)textShouldBeginEditing:(NSText *)textObject{<br />return // Test d&#39;une ligne<br />}<br />
    
  • syncsync Membre
    04:31 modifié #5
    ;D

    Oui je sais, après reflexion je suis parti sur une autre voie, sans doute, pas dans le contexte de la question originelle....


    Bonne soirée

    Anthony
Connectez-vous ou Inscrivez-vous pour répondre.