UILabel touch und der text berührt, wo
Habe ich UILabel, die einige text-und 2-Monats-Namen wie "Im Monat Januar und Juli die Sonne scheinen wird peak"
Ich sub klassifiziert UILabel und Hinzugefügt touch-Ereignis zu.
Jetzt möchte ich, um das Wort unter dem text, wo der Benutzer berührt, und finden Sie heraus, ob der Benutzer berührt, Januar/Juli oder nicht. Ist es möglich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie finden, was Sie suchen in der Dokumentation für UITextInputProtocol.
Einige weitere high-level-Informationen, check-out von Apple Text, Web-und Editing-Guide, insbesondere in dem Abschnitt mit dem Titel "Eine Geführte Tour von einem UITextInput Umsetzung". Es wird erläutert, wie Sie erstellen können indizierten Positionen im text, und Fragen berührt, von welchem text die position gelandet nächste.
Apple verweist auf eine Probe projiziert genannt
SimpleTextInput
, aber ich kann nicht scheinen, um es zu finden. Ich werde weiter suchen.Ich umging dieses problem, indem Sie transaparent UIViews auf der Oberseite des UILabel, die verkabelt wurden, zu behandeln touch-Ereignisse. Sie können die position und die Größe der Treffer-zone-Etiketten durch Berechnung der Größe der relevanten Teile des Textes. Dieser Ansatz hat auch den Vorteil, dass Sie in der Lage zu zwicken die Größen Ihrer Treffer Zonen, um Sie größer und damit einfacher zu Tippen mit Fett Fingern.
Habe ich umgesetzt, deine Frage, nur so zum Spaß auf my blog.
Einfach ich habe Unterklassen
UILabel
hinzufügentouchEnded
zu erkennen, touch-position und letter-position.Hoffe, das hilft
cheers.
Hatte ich ein ähnliches problem wie der ursprüngliche poster. Ich wollte die Benutzer werden in der Lage, lange-drücken Sie in einem UILabel, das war die Anzeige von einer durch Komma getrennten Liste von strings, und extrahieren einer sub-string der entsprechenden touch-Lage zwischen der nächsten einschließenden Kommata.
Das problem ist, dass UILabel nicht implementieren die UITextInput Protokoll, sonst wäre die Implementierung einfach.
Ich wusste nicht, wie einem der vorgeschlagenen workarounds, die ich gefunden, also habe ich beschlossen zu kommen mit meiner eigenen Lösung. Nach einiger überlegung und Forschung, erkannte ich, dass, während UILabel nicht unterstützt UITextInput, UITextView tut. Ich wollte nicht, um zu ersetzen Sie alle den UILabels in der Benutzeroberfläche mit UITextViews, so dass ich dachte, "warum nicht Sie programmgesteuert erstellen Sie einen UITextView hinter den kulissen, mit dem genau gleichen text-rendering-Einstellungen, und verwenden Sie seine UITextInput Methoden zum zuordnen der touch-Punkt an die gewünschte sub-string?".
Erwies sich als die ideale Lösung aus meiner Sicht.
Befestigte ich eine UILongPressGestureRecognizer des UILabels und rufen Sie die folgende Funktion in der Geste handler:
Das einzige, was ein bisschen hacky an dieser Technik ist, dass Sie zur hand-optimieren Sie die Darstellung in der UITextView durch die Anpassung der textContainerInset region. Ansonsten bekommt man nicht genau die gleiche Verpackung und die Platzierung des Textes in der UITextView, wie man das in UILabel. Ansonsten ist das ziemlich generische code, der sollte die Arbeit für jemand anderen.