UITextField ohne Tastatur und der Cursor

  • UITextField ohne Tastatur und der Cursor

    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. :S

    --

    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!
  • Hmm. Ich hab mir gerade nochmal das "Eingabefeld" über dem Ziffernblock der originalen iOS Telefonie-Applikation angeschaut. Das ist ja quasi genau meine Situation mit eigenen Buttons (dort den Zifferntasten).

    Es sieht so aus, als wäre das dort gar kein UITextField, denn man kann gar keinen Teilstring selektieren, hat keinen Cursor und somit auch das Problem nicht, irgendwo in der Mitte des Strings etwas löschen zu müssen.

    Vielleicht mache ich ja doch kein beschnittenes UITextField, sondern ein Label, an dem ich die UIPasteboard/UIMenuController Geschichte selbst mache.

    --

    Freue mich weiterhin über Ideen und Vorschläge oder vielleicht sogar Erfahrungen ...

    Danke!
  • Wollte nur mal kurz ansagen, dass das mit einem eigenen UILabel sehr gut geklappt hat. :)

    Da man dem UILabel leider kein Hintergrundbild zuweisen kann, hab ich nun doch zwei Views übereinander (ein UIImageView für das Hintergrundbild unter dem Label), aber die Touch-Geschichten sind jedenfalls ordentlich im Label gekapselt.

    Für meinen Fall reicht das Copy/Paste des kompletten Textes ohne Auswahl von Teilstrings (analog zur iPhone Telefonie App) auch völlig aus.