web-dev-qa-db-fra.com

Désactiver le curseur clignotant dans UITextField?

J'ai suivi les instructions ici et configuré avec succès un UITextField qui est mis à jour avec un UIDatePicker. Cependant, le curseur dans UITextField clignote, ce qui me semble un peu gênant. Existe-t-il une solution pour se débarrasser de ce curseur?

26
Tobias Frischholz

Je réalise que cette question est ancienne, mais avec les mises à jour pour iOS 7, il est maintenant possible de masquer le curseur en procédant comme suit:

[[self textFieldName] setTintColor:[UIColor clearColor]];

Cependant, cela ne fonctionnera que sur iOS 7+.

42
Jamie Chapman

Sous-classe UITextfield et écrasez la- (CGRect)caretRectForPosition:(UITextPosition *)positionméthode et retourCGRectZero.

- (CGRect)caretRectForPosition:(UITextPosition *)position {
    return CGRectZero;
}
39
Pradeep Reddy Kypa

J'espère que cela vous aidera.

Définir le curseur UIColor -> Vide.

 [[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];

Dans Swift: 2.3

self.textField.valueForKey("textInputTraits")?.setValue(UIColor.clearColor() , forKey:"insertionPointColor")
32
Balaji G

Je ne pouvais pas faire fonctionner la solution de jcm. Ce que j'ai fini par faire, c'est de sous-classer UILabel pour imiter la fonctionnalité interactive d'un UITextField sans les parties que je ne voulais pas (comme le curseur). J'ai écrit un article de blog à ce sujet ici:

http://pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/

Fondamentalement, la sous-classe UILabel doit écraser isUserInteractionEnabled, inputView, inputViewAccessory et canBecomeFirstResponder. Ce ne sont que quelques lignes de code et cela a plus de sens.

6
Pietro Rea

Entièrement ridicule, mais si vous définissez la couleur de la teinte du champ de texte dans la section UIView de l'inspecteur de propriétés d'Interface Builder pour correspondre à la couleur d'arrière-plan, le curseur apparaîtra invisible:

2
brandonscript

Ce que j'ai fait est de superposer un autre UITextField sur celui dont je voulais masquer le curseur. Ensuite, dans la méthode de délégation textFieldShouldBeginEditing, je règle l'autre textField pour qu'il devienne le premier répondant et renvoie NO.

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (textField.tag==TAG_OF_DUMMY_TEXTFIELD) {
        [otherField becomeFirstResponder];
        return NO;
    }
    return YES;
}

Et dans la méthode, le sélecteur de date appelle:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@YOUR_DATE_FORMAT];
dummyField.text = [dateFormatter stringFromDate:datePicker.date];

Dans Interface Builder, otherField (celui avec la vue d'entrée datePicker) est derrière dummyField (celui qui cache le curseur).

1
jcm

Ce n'est pas la meilleure solution, mais vous pouvez également régler l'opacité de la couleur de teinte sur 0%.

 enter image description here

1
Wouter van Zuilen

J'ai trouvé cette solution la plus facile à mettre en œuvre.

Assurez-vous de définir UITextFieldDelegate dans votre fichier .h:

.... UIViewController <UITextFieldDelegate>

Dans votre fichier .m, ajoutez ceci à la méthode que vous appelez pour le sélecteur de date:

[yourTextField resignFirstResponder];

Cela empêchera le champ de texte de clignoter.

0
nimrod

L'approche de Balaji fonctionne.

J'ai aussi souvent utilisé de telles solutions KVC. Bien que cela ne semble pas être documenté, cela fonctionne. Franchement, vous n’utilisez ici aucune méthode privée , Mais seulement un codage clé-valeur qui est légal.

Il est radicalement différent de [addNewCategoryTextField textInputTraits].

P.S. Hier, ma nouvelle application est apparue sur l'AppStore sans aucun problème avec cette approche. Et ce n'est pas le premier cas lorsque j'utilise KVC pour modifier certaines propriétés en lecture seule (telles que navigatonBar) ou des propriétés privées.

0
malex