6
votes

Textfield multi-lignes (similaire à SMS) et / ou bouton 'fait' dans UITEXTVIEW

Je suis en train de rechercher cela depuis quelques jours et j'apprécierais un peu d'aide. Y a-t-il un moyen de générer un UiteXtfield multi-lignes comme une utilisation Apple dans l'application SMS? La chose utile à propos de ce contrôle est qu'il a l'apparence «Sunk» qui indique qu'il s'agit d'une boîte d'entrée de texte, mais en même temps, il se développe sur chaque caractère de nouvelle ligne.

omettre cela, si je suis obligé d'utiliser un UITEXTVIEW, quelqu'un peut-il informer la meilleure façon de rejeter le clavier? Les boutons "faites" et "Go" apparaissent simplement pour générer des caractères transversaux ('\ n'). Cela me semble mal - surtout d'au moins un de ceux-ci devrait générer un caractère différent, de sorte que je puisse toujours permettre aux caractères de nouvelle ligne, mais rejeter également mon clavier sur une touche spécifique.

Est-ce que je manque quelque chose de simple ici?

Merci d'avance :)


0 commentaires

5 Réponses :


2
votes

Facebook a publié un package open-source appelé Three20 qui possède un champ de texte multiligne. Vous pouvez l'utiliser assez facilement pour un champ de texte en expansion.

Tant que le bouton "Terminé", vous pouvez définir votre contrôleur d'affichage en tant que uitextfieldelegate . Ensuite, utilisez cette méthode: xxx

Dans le cas de trois20, utilisez cette méthode de TTTexteDitordélégate : xxx


2 commentaires

Bonjour ... UitextView n'a pas de méthode TextViewshouldretturn, même lorsqu'il est défini comme UitextViewelegate, de sorte que cela ne fonctionne pas. Je suis également détesté d'utiliser les trois20 trucs, car j'ai lu que les rapports de plusieurs applications sont rejetés à partir de l'App Store en raison des API privées que trois20 utilisations.


Les références d'API privées ont depuis longtemps été supprimées de trois20 (voir la liste de modifications du 17 novembre 2009). Comme il m'a été expliqué à la tournée mondiale de l'iPhone Tech Talk Talk Talk ce dernier, tout code que vous finissez par ne pas utiliser est supprimé de toute façon des fichiers binaires de sortie. Voir «Décapage de code mort» dans le Guide du système de construction Xcode (une partie de la bibliothèque de référence d'OS iPhone).



1
votes

Eh bien, j'ai eu un problème similaire et ce que j'ai fini par utiliser est en fait créé un Uitextfield désactivé comme arrière-plan et une vue Uitext au-dessus de l'entrée pour obtenir l'entrée ... elle suce que l'API iPhone ne peut pas avoir ceci par défaut. Notez également que cela ne se développe pas automatiquement, mais vous pouvez le faire si vous le souhaitez en manipulant le textviewDideChange:

comme pour manipuler la touche de retour, essayez de mettre en œuvre la méthode suivante à partir du UitextviewDelegate : xxx


2 commentaires

Merci pour les conseils sur l'UitextViewDelegate, mais cela ne fonctionnera pas, j'ai peur. Comme je souhaite permettre une entrée multiligne, je ne peux pas numériser pour "\ n" - c'est pourquoi j'ai ressenti le comportement de "go" et "fait" générer \ n est inutile.


Eh bien, la solution suggérée (une personne que j'utilise) serait d'ajouter un bouton "fait" à un uinavigationbar en tant que UINAVIGATIONITEM 'S droite de droite , et quand il a cliqué, juste démignfirstreesponder sur votre TextView. Ou, fondamentalement, ajoutez simplement tout autre élément de l'interface utilisateur pour démissionner du répondeur. La barre de navigation semble largement utilisée, cependant.



0
votes
  • (vide) texteditordidbeginetiting: (tttexteditor *) texteditor { Et

    • (vide) TextEditOrdenDIdIt: (tttexteditor *) TextEditor { pourrait être ce que vous cherchez. Profitez!

0 commentaires

9
votes

Peut-être que vous pouvez construire sur une classe que j'ai écrite? C'est la même chose que tttexteditor, sans les problèmes laids: http: // www. hanspinckaers.com/multi-line-uitextview-similar-to-sms


0 commentaires

3
votes

Une ancienne question, mais après plusieurs heures, j'ai compris comment le rendre parfaitement parfaitement que dans Instagram (il a le meilleur algorithme parmi tous BTW)

Initialiser avec ceci: P>

- (void) adjustTextInputHeightForText:(NSString*)text {

   int h1 = [text sizeWithFont:_textField.font].height;
   int h2 = [text sizeWithFont:_textField.font constrainedToSize:CGSizeMake(_textField.frame.size.width - 16, 170.0f) lineBreakMode:UILineBreakModeWordWrap].height;

   [UIView animateWithDuration:.1f animations:^
   {
      if (h2 == h1)
      {
         _inputBackgroundView.frame = CGRectMake(0.0f, self.frame.size.height - _InputBarHeight, self.frame.size.width, _InputBarHeight);
      }
      else
      {
         CGSize size = CGSizeMake(_textField.frame.size.width, h2 + 24);
         _inputBackgroundView.frame = CGRectMake(0.0f, self.frame.size.height - size.height, self.frame.size.width, size.height);
      }
      CGRect r = _textField.frame;
      r.origin.y = 12;
      r.size.height = _inputBackgroundView.frame.size.height - 18;
      _textField.frame = r;

   } completion:^(BOOL finished)
   {
      //
   }];
}


3 commentaires

Bonjour, votre code ne compile pas (E.G.InparBarheight, image de pied de page_bg.png, etc.). Si vous pouviez créer un projet minimal avec votre code et passer un lien ici qui permet à chacun qui en a besoin de télécharger (GitHub peut-être?) Ce serait très apprécié par beaucoup de gens que je crois, y compris moi :)


Vous êtes les bienvenus :) J'ai créé Git Repo avec cet exemple github.com/alekperov/chatinputSample


@Maratal merci beaucoup!