2009-08-01 8 views
1

Est-ce que quelqu'un sait comment créer un champ de texte qui a un fond d'UIImage et fait le mot-emballage?Un champ de texte contenant un fond d'image sur l'iPhone?

Il semble que le retour à la ligne ne soit pas disponible sur UITextField, alors qu'une image d'arrière-plan n'est pas disponible pour UITextView! En outre, il devrait changer la taille du contrôle ou au moins alerter que le nombre de lignes a changé afin qu'un délégué puisse changer sa taille.

Un exemple d'un tel contrôle est le champ de saisie pour les messages dans l'application SMS.

Édition: le code doit également afficher le champ de texte pour toujours afficher le texte en cours d'édition. Apparemment, lorsque UITextView change de taille pendant l'édition, il perd en quelque sorte son focus sur le texte actuel.

Merci d'avance! Aviad.

Répondre

2

Le retour à la ligne n'est pas disponible sur UITextField car UITextField ne prend en charge que le texte sur une seule ligne.

Utilisez un UITextView. Faites textView.backgroundColor = [UIColor clearColor]. Ajoutez d'abord le UIImage, puis le UITextView au-dessus. Assurez-vous que les tailles sont correctes, et ça devrait aller.

En ce qui concerne la modification de la taille du UITextView, dans votre UITextViewDelegate, faire quelque chose comme ceci:

- (void)textViewDidChange:(UITextView *)textView 
{ 
    NSString *s = textView.text; 
    CGSize testSize = CGSizeMake(textView.frame.size.width, NSIntegerMax); 
    CGSize neededSize = [s sizeWithFont: textView.font constrainedToSize: testSize  lineBreakMode: UILineBreakModeWordWrap]; // or UILineBreakModeCharacterWrap? 

    if (neededSize.height > testSize.height) 
    { 
     // grow textView 
     textView.frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y, neededSize.width, neededSize.height); 

     // then adjust the image size -- something like this 
     imageView.frame = textView.frame 
    } 

} 
+0

Comme je l'ai dit, je veux un comportement similaire à celui de l'application SMS avec l'iPhone. Lorsque le texte doit être enveloppé, le composant entier doit croître (y compris l'image, vraisemblablement en utilisant le message stretchableImage d'UIImage). –

+0

Est-ce mieux? – Amagrammer

+0

Quelque chose d'étrange sur le code. Tout d'abord, il n'y a pas de "textSize", mais vous pourriez vouloir dire "testSize". Deuxièmement, et le plus bizarre, est le "neededSize.height> testSize.height", qui retournerait toujours faux car la taille de testSize est NSIntegerMax (init'd deux lignes plus tôt et n'a jamais changé ..) Ai-je raté quelque chose? –

0

Finalement, j'ai écrit mon propre code, qui a travaillé dans une certaine mesure avec beaucoup de solutions de contournement (changer la mise au point par exemple, redimensionner en supprimant tout le texte à nouveau, etc.). Si quelqu'un est intéressé, je posterai le code.

Dans d'autres nouvelles, juste aujourd'hui j'ai vu dans une question différente ici quelque chose appelé IFVerticallyExpandingTextField. Le nom était prometteur, le code est là, et je vais y jeter un coup d'œil. Toute personne ayant un problème similaire, vous pourriez vouloir le voir aussi. Mon erreur, je ne l'ai pas lu assez attentivement: IFVerticallyExpandingTextField est pour le Mac, pas l'iPhone.

Questions connexes