12
votes

Position du curseur dans une vue UitextView

Je cherche un non privé de trouver la position du curseur ou du caret ( barre clignotant ) dans un uitextview de préférence comme un cgpoint .

Il peut y avoir une question comme celle-ci déjà mais elle ne fournit pas de manière définitive pour le faire. Et, je ne veux pas dire le nsrange de la zone sélectionnée.


2 commentaires

Pouvez-vous nous dire pourquoi vous voulez faire cela pour plus d'informations de fond?


C'est pour afficher un uimenucontroller .


4 Réponses :


0
votes

Il n'y a pas de ce type. Arrêt complet.

La seule chose que vous puissiez faire pour venir fermeture est à en parallèle, posez le texte à l'aide de CareText, de calculer la position du texte à partir d'un point et appliquez-la sur l'UITEXTVIEW. Ceci, cependant, fonctionne avec des sélections non-0 uniquement. De plus, CareText a un moteur de présentation de texte différent, par ex. Prend en charge Kerning, que UitextView ne le fait pas. Cela peut entraîner des écarts du texte rendu et défini et donner ainsi des résultats sous-optimaux.

Il n'y a absolument aucun moyen de positionner le caret. Cette tâche est même très si vous utilisez une API privée. C'est juste l'un des nombreux "tout simplement pas" dans iOS.


2 commentaires

Donc, il n'y a absolument aucun moyen de calculer la position du caret?


Non. Pas avec uitextview. Comme je l'ai dit: Vous pouvez sortir le texte une seconde fois en utilisant Caretext et calculer la position là-bas, mais cela vous donne au mieux les estimations.



21
votes

Je viens de l'avoir dans un autre fil:

Nécessite iOS 3.2 ou version ultérieure. P>

if (textview.selectedTextRange.empty) {
// get cursor position and do stuff ...
}


2 commentaires

+1 Yep, ceci est sur le < code> protocole


Ceci n'est pas implémenté dans IOS 4.3 ou moins, comme on pourrait penser lors de la lecture de la documentation. Ça ne fonctionne que dans iOS5 +



2
votes

Swift 2.1 Version:

let cursorPosition = infoTextView.caretRectForPosition( (infoTextView.selectedTextRange?.start)! ).origin

print("cursorPosition:\(cursorPosition)")


0 commentaires

0
votes

Swift 4 Version: xxx

Nous utilisons simplement textview.selectedtextrange pour obtenir une plage de texte sélectionnée et que textview. Caretrect (pour:) pour obtenir CGRRECT Définition de la position du caret.


0 commentaires