Hallo,
da ist so ein UITextField in meiner App und Buttons drum herum die die Tastatur für dieses Textfeld darstellen. Zuvor war an dem Feld "User Interaction Enabled" nicht gesetzt. Es wurde also kein Keyboard eingeblendet und alles war schick.
Bis die Benutzer auf die Idee kommen, dass sie in das Textfeld Texte aus dem Pasteboard einfügen wollen. Nach ein bisschen Herumgejuckel geht das nun.
- User Interaction Enabled ist wieder an
- inputView hat einen View mit CGRectZero bekommen, so dass weiterhin keine Tastatur eingeblendet wird
- wenn das Textfeld der firstResponder ist, füge ich mit paste: neue Texte hinzu (so landen sie an der mir unbekannten Cursor-Position)
- Auswahl, Einfügen, Kopieren, Ersetzen, ... alles schick
... bis auf das Löschen! Natürlich habe ich in meiner eigenen Button-Ansammlung auch einen "C" Button. Früher als alles einfach war, hat der einfach das letzte Zeichen im Textfeld gelöscht. Jetzt kann der Benutzer aber hingehen, den Cursor mit der Lupe irgendwo ins Textfeld packen und erwartet dann, dass beim Druck auf meine "C" Taste das Zeichen vor dem Cursor gelöscht wird.
Für das erste Zeichen habe ich mir einen wilden Hack einfallen lassen. Ich paste: einfach einen Markerstring ins Textfeld und habe in texField:shouldChangeCharactersInRange:replacementString dann eine Bedingung, die diesen speziellen Markerstring abfängt. So habe ich in range.location die aktuelle Cursorposition. Allerdings kann ich dort ja nicht YES zurück geben, sonst würde mein Markerstring ja einfügt werden. Stattdessen lösche ich das Zeichen und setze die text Eigenschaft im UITextField mit dem neuen Text. Daraufhin wandert der Cursor ans Ende des UITextView.
Ab dem zweiten Druck auf meine eigene "C" Taste löscht man also wieder vom Ende Strings die Zeichen.
--
Gibt es irgendeinen Trick, wie ich Zeichen an bestimmter Position in einem UITextView löschen kann ohne den Cursor zu verändern? Oder wie ich den Cursor explizit setzen kann?
Irgendeine andere Idee?
--
Ich möchte nur ungern die Label-überlagert-UITextView-Variante bauen müssen. Sowas ist einfach :wacko:
Danke schonmal!
da ist so ein UITextField in meiner App und Buttons drum herum die die Tastatur für dieses Textfeld darstellen. Zuvor war an dem Feld "User Interaction Enabled" nicht gesetzt. Es wurde also kein Keyboard eingeblendet und alles war schick.
Bis die Benutzer auf die Idee kommen, dass sie in das Textfeld Texte aus dem Pasteboard einfügen wollen. Nach ein bisschen Herumgejuckel geht das nun.
- User Interaction Enabled ist wieder an
- inputView hat einen View mit CGRectZero bekommen, so dass weiterhin keine Tastatur eingeblendet wird
- wenn das Textfeld der firstResponder ist, füge ich mit paste: neue Texte hinzu (so landen sie an der mir unbekannten Cursor-Position)
- Auswahl, Einfügen, Kopieren, Ersetzen, ... alles schick
... bis auf das Löschen! Natürlich habe ich in meiner eigenen Button-Ansammlung auch einen "C" Button. Früher als alles einfach war, hat der einfach das letzte Zeichen im Textfeld gelöscht. Jetzt kann der Benutzer aber hingehen, den Cursor mit der Lupe irgendwo ins Textfeld packen und erwartet dann, dass beim Druck auf meine "C" Taste das Zeichen vor dem Cursor gelöscht wird.
Für das erste Zeichen habe ich mir einen wilden Hack einfallen lassen. Ich paste: einfach einen Markerstring ins Textfeld und habe in texField:shouldChangeCharactersInRange:replacementString dann eine Bedingung, die diesen speziellen Markerstring abfängt. So habe ich in range.location die aktuelle Cursorposition. Allerdings kann ich dort ja nicht YES zurück geben, sonst würde mein Markerstring ja einfügt werden. Stattdessen lösche ich das Zeichen und setze die text Eigenschaft im UITextField mit dem neuen Text. Daraufhin wandert der Cursor ans Ende des UITextView.
Ab dem zweiten Druck auf meine eigene "C" Taste löscht man also wieder vom Ende Strings die Zeichen.
--
Gibt es irgendeinen Trick, wie ich Zeichen an bestimmter Position in einem UITextView löschen kann ohne den Cursor zu verändern? Oder wie ich den Cursor explizit setzen kann?
Irgendeine andere Idee?
--
Ich möchte nur ungern die Label-überlagert-UITextView-Variante bauen müssen. Sowas ist einfach :wacko:
Danke schonmal!