2010-07-28 6 views
4

Nous essayons cela pour les paramètres de mot de passe, de sorte que le curseur ne doit pas être visible par l'utilisateur.Comment cacher le curseur du champ de texte sur l'iPhone lorsque le clavier est actif

+0

Pourquoi voulez-vous cacher le curseur? Vous devez masquer les caractères, ce qui est fait en définissant secureTextEntry à YES, comme @Peter a répondu. –

+0

J'ai besoin de cacher (rendre invisible) le curseur de l'utilisateur. sa sécurité juste avancée que je voulais mettre en œuvre. – darshan

Répondre

1

modifier: pour répondre à la question si, en se cachant le curseur se fait plus facile en superposant le UITextField avec un autre UITextField, où l'un dos est en fait le premier répondeur, et l'avant on agit au moins recevoir le focus (à l'aide -(void)textFieldDidBeginEditing:(UITextField *)textField, et passer le focus sur). Dans

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
       replacementString:(NSString *)string 

appliquer le remplacement sur la UITextField avant exactement, en utilisant quelque chose comme

front.text = [front.text stringByReplacingCharactersInRange:range withString:string]; 

Vous allez probablement casser copier coller & fonctionnalité de cette façon. Aussi, faites très attention à ce que vous faites dans ces fonctions de délégué. Attendez-vous à l'inattendu.

Ma réponse originale, également applicable:


Je ne sais pas ce que dans ce contexte, la "sécurité avancée" signifierait, mais un coup d'oeil à

change the secure password character in uitextfield

à la ruine l'expérience utilisateur encore plus, et peut-être ajouter plus de «sécurité», vous pouvez:

  • désactiver la fonctionnalité de backspace en retournant NO si [string length] == 0
  • ajouter 1+(arc4rand()%4) caractères pour chaque caractère saisi (comme on le voit sur certains systèmes de fenêtrage)
  • ajouter des caractères aléatoires au lieu d'un caractère d'espace réservé constant

mais je dois dire que Je vraiment ne vois pas le point de tout cela.

+0

iPhone ont le contrôle PIN où nous pouvons définir le mot de passe pour verrouiller le téléphone, là aussi vous ne trouvez aucun curseur sur textfield. Nous voulons mettre en œuvre la même chose. – darshan

+1

Je sais, et ma réponse donne une solution pour cela. L'avez-vous lu? – mvds

0

Vous pouvez utiliser un champ de texte fictif masqué et utiliser le délégué textDidChage pour TextField et utiliser cette valeur pour remplir le champ Valeurs masquées dans le mot de passe réel.

Dans Interface Builder ont un champ de texte factice qui est caché, maintenir un IBOutlet pour que dire

IBOutlet UITextField * passwordField; IBOutlet UItextField * dummyField;

délégué a également établi pour cela et écrire les méthodes délégué suivantes

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
NSString *dummyText = dummyField.text; 
NSString *changedText = @""; 
if(dummyField == textField) 
{ 
    if([string length] == 0) 
    { 
     if([dummyText length] <= 1) 
     { 
      changedText = @""; 
     } 
     else 
     { 
      changedText = [NSString stringWithFormat:@"%@",[dummyText substringToIndex:[dummyText length] - 1]]; 
     } 
    } 
    else 
    { 
     changedText = [NSString stringWithFormat:@"%@%@",dummyText,string]; 
    } 
    passwordField.text = changedText; 
} 
return YES; } 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
if(passwordField == textField) 
{ 
    [dummyField becomeFirstResponder]; 
    return NO; 
} 
return YES; } 


- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
[textField resignFirstResponder]; 
return YES; } 
0

J'ai eu ce problème aussi.J'ai utilisé la solution décrite here

Il remplace le UITextField avec un UILabel personnalisé avec les réglages suivants:

  1. Remplacer les propriétés inputView et inputViewAccessory pour permettre le réglage de la vue du clavier à apparaître lorsque l'étiquette devient la première répondeur.
  2. 
    
        @interface PRLabel : UILabel  
    
        @property (strong, nonatomic, readwrite) UIView* inputView; 
        @property (strong, nonatomic, readwrite) UIView* inputAccessoryView; 
    
        @end 
    
    
  3. Pour que l'étiquette réponde aux événements tactiles, remplacez la méthode isUserInteractionEnabled pour toujours retourner YES. En outre, remplacez la méthode touchEnded pour que l'étiquette soit le premier répondeur lorsqu'un contact est détecté. Remplacer la méthode canBecomeFirstResponder pour toujours retourner YES.
  4. Cela permettra à la vue d'entrée de monter.
  5. 
        @implementation PRLabel 
        -(id)initWithFrame:(CGRect)frame 
        { 
        self = [super initWithFrame:frame]; 
        if (self) { 
        // Initialization code 
        } 
        return self; 
        } 
    
        -(BOOL)isUserInteractionEnabled 
        { 
        return YES; 
        } 
    
        -(BOOL)canBecomeFirstResponder 
        { 
        return YES; 
        } 
    
        -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
        { 
        [self becomeFirstResponder]; 
        } 
        @end 
    
Questions connexes