Après avoir ajouté une vue de droite sur un Donc, bien que cela ne semble pas être indiqué dans la documentation, il me semble que le bouton Clear ne s'affiche que lorsque la vue correcte n'est pas affichée (et lorsque la propriété de texte n'est pas une chaîne vide). Est-ce exact et quelqu'un a-t-il une solution de contournement fiable? En attendant, je crois que je suis coincé avec devoir créer un UIView qui superpose ma bonne vue au sommet d'un Uitextfield afin d'obtenir ce que je gagnerais de l'Uitextfield seul. P> uitextfield code>, je constate qu'il refuse d'afficher à la fois la vue correcte et la touche Effacer (avoir les deux
droiteviewMode code> et
et
et
et
ClearButtonMode Code> défini sur
UITEXTFIELDVIEWMODIES code>). Je vois la bonne vue mais le bouton clair n'est plus affiché. Je me suis assuré qu'ils ne se chevauchent pas en cas de remplacement
ClearButtonRectForbounds code> et
ClearButtonRectForbounds code>, en vain. Et si j'utilise la View au lieu de RedayView, aucun problème de ce type ne se produit et que la vue de gauche et le bouton clair sont affichés. P>
4 Réponses :
Oui, vous avez raison. Uitextfield a des propriétés telles que la vue gauche et droite. Si vous utilisez un bouton clair, il chevauche à droiteview. p>
formulaire Apple doc http: // développeur.apple.com/library/ios/#documentation/uikit/reeference/uitextfield_class/reference/uitextfield.html P>
Si votre vue de superposition ne chevauche pas d'autres vues de frère de frère, il reçoit des événements tactiles comme une autre vue. Si vous spécifiez un contrôle de votre vue, ce contrôle passe et envoie des actions comme d'habitude. Si une vue de superposition chevauche le bouton CLEAR, cependant, le bouton CLEAR a toujours priorité dans la réception d'événements. Par défaut, la vue de la superposition de droite se chevauche le bouton CLEAR. p> blockQuote>
Mais comme si le nom dit que c'est une vue. Vous pouvez donc créer votre propre point de vue qui a 2 boutons sur elle et définir la vision de la vue de Textfield. Si vous le souhaitez, vous pouvez utiliser des méthodes de délégation de Textfield pour que vos boutons apparaissent et disparaissent de la vue. p>
La documentation semble trompeuse. Cela ne dit pas que le bouton clair et la bonne vue sont mutuellement exclusifs. Cela dit seulement qu'ils se chevauchent. Cela fait semblant que si j'avais utilisé une vue transparente, je verrais le bouton clair. Cependant, ce n'est pas le cas.
Vous ne pouvez pas afficher les deux en même temps, mais vous pouvez le faire comme ce
Merveilleuse réponse!
J'ai eu le même problème, mais j'ai été facilement résolu en "rigoler" l'Uitextfield à l'aide de la vue de gauche au lieu de voir de droite. De cette façon, vous pouvez utiliser un bouton clair et votre supposé à droiteview code>. Tout ce que vous avez à faire est de la sous-classe Uitextfield et de renvoyer le «coin droit» dans
gaucheViewrectorborcs code> et la mise à jour de la même manière
éditionRectForbounds code> et
textrectforbounds code>. Fonctionne parfaitement. P>
J'ai trouvé plus facile d'ajouter une sous-vision et une substitution éditionRectForbounds / textrectforbounds code> pour l'éviter. N'avait pas besoin d'utiliser
gaucheview code> (puisque je veux toujours que ma sous-affichée soit affichée.)
Si vous souhaitez ajouter un exemple de code, je vous donnerai un uppote :)
Fonctionne bien mais je devais remplacer PlaceholderRectForbounds code> aussi, pour le faire fonctionner correctement.
Je sauve suite à la réponse @strange (en utilisant la vue de gauche au lieu de droite) avec un code:
-(CGRect)leftViewRectForBounds:(CGRect)bounds { return CGRectOffset([super leftViewRectForBounds:bounds], bounds.size.width - 30, 0); } -(CGRect)clearButtonRectForBounds:(CGRect)bounds { return CGRectOffset([super clearButtonRectForBounds:bounds], -30, 0); } -(CGRect)editingRectForBounds:(CGRect)bounds { CGRect rect = bounds; rect.origin.x = 10; rect.size.width -= 60; return rect; } -(CGRect)textRectForBounds:(CGRect)bounds { CGRect rect = bounds; rect.origin.x = 10; rect.size.width -= 60; return rect; }