Détecter le moment où, de retour à la ligne commence dans UITextView
J'essaie de détecter le moment où le chariot se déplace à une nouvelle ligne dans UITextView. Je peux le détecter par comparaison total, plus tard, de largeur avec UITextView largeur:
CGSize size = [textView.text sizeWithAttributes:textView.typingAttributes];
if(size.width > textView.bounds.size.width)
NSLog (@"New line");
Mais il dose pas de travail de manière correcte, parce que -sizeWithAttributes:textView
renvoie uniquement la largeur de lettres sans indentation largeur. Aide s'il vous plaît résoudre ce problème.
Est-ce la norme
C'est un standard
UITextView
que vous utilisez, ou un sous-classé version ?C'est un standard
OriginalL'auteur mriddi | 2013-11-15
Vous devez vous connecter pour publier un commentaire.
C'est comment j'allais le faire:
UITextPosition
du dernier caractère.caretRectForPosition
sur votreUITextView
.CGRect
variable et initialement magasinCGRectZero
.textViewDidChange:
méthode, appelcaretRectForPosition:
en passant par leUITextPosition
.CGRect
variable. Si le nouveau y-origine de la caretRect est plus grand que le précédent, cela signifie qu'une nouvelle ligne a été atteint.Exemple de code:
Aussi, vous devriez lire la documentation pour
UITextInput
protocole de référence ici. C'est magique, je vous dis.Laissez-moi savoir si vous avez d'autres problèmes avec cette.
il est génial
Il y a des cas où cela ne fonctionne pas. Qu'en est-il de l'utilisateur colle dans le texte et la position du curseur est déplacé dans le processus?
Donc je l'ai mentionné que les conditions ajouter.
Svp quelqu'un peut-il m'aider avec la question suivante? Si l'utilisateur écrit ce texte à puces multiples (sauts de ligne) dans UITextView, comment détecter le nombre total de sauts de ligne?
OriginalL'auteur n00bProgrammer
Pour Swift utiliser cette
OriginalL'auteur Sourav Gupta
Vous pouvez utiliser le UITextViewDelegate
Cela ne fonctionne que si l'utilisateur appuie sur la touche retour, pas si la nouvelle ligne commence car il a atteint la fin de la ligne précédente.
OriginalL'auteur Stuart Campbell
Swift 3
La accepté de répondre et de la swift version fonctionne très bien, mais ici, c'est une Swift 3 version pour les gens paresseux.
OriginalL'auteur
réponse de @n00bProgrammer dans
Swift-4
avec plus précis ligne de détection de rupture.@n00bProgrammer réponse est parfait, sauf une chose, il réagit différemment lorsque l'utilisateur commence à taper dans une première ligne, il présente qui
Started New Line
trop.Surmonter question, ici, est le raffinée code
OriginalL'auteur Kiran Jasvanee
Vous avez besoin pour obtenir la hauteur du texte, pas la largeur. Utiliser
sizeWithFont:constrainedToSize:lineBreakMode:
(si vous avez besoin de soutien iOS 6 ou une version antérieure) ou de l'utilisationboundingRectWithSize:options:attributes:context:
si vous ne prend en charge iOS 7.Regarder les docs. Il est semblable à la
sizeWithAttributes:
méthode que vous utilisez. Vous avez juste besoin de passer à une taille. Passer d'une taille à la largeur désirée et une très grande hauteur. Le retour de la taille sera le même, mais avec le besoin de la hauteur pour s'adapter le texte à la largeur.OriginalL'auteur rmaddy