UITextView selectedRange wird beim programmgesteuerten Festlegen nicht angezeigt

Mein Problem ist das programmgesteuerte Setzen des selectedRange von UITextViewwählt aus der text, abernicht Zeigen Sie visuell an, dass es ausgewählt ist. Klingt dies nach einem Fehler in OS 3.0 / 3.1? Was noch wichtiger ist: Gibt es eine Lösung oder Vorschläge für die Anzeige der Auswahl? (Beispielprojekt am Ende der Nachricht verlinkt)

Woher weiß ich, dass es ausgewählt ist, da ich kein visuelles Feedback erhalte? Zwei Gründe:

Kein blinkender CursorDurch Antippen einer beliebigen Taste auf der Tastatur wird der vorhandene Text im Auswahlbereich gelöscht.

Ich habe eine UITextView in einem Ansichtscontroller, mit dem ein vom Benutzer änderbarer Wert bearbeitet werden kann. Die Editorsteuerung wird geöffnet, wenn ein Doppeltipp auf eine Tabellenzeile eingeht oder der Benutzer auf die Schaltfläche zum Anzeigen von Details in einer Zeile tippt. Der viewcontroller kommt über presentModalViewController an, und in der viewWillAppear-Methode des Editors von VC starte ich die Tastatur mit[self.textView becomeFirstResponder];

Manchmal möchte ich den Editor mit dem gesamten Inhalt der ausgewählten Textansicht starten, sodass der Benutzer einfach mit der Eingabe beginnen kann und den vorhandenen Inhalt löscht. Dies liegt daran, dass ich neue Elemente mit Standardtiteln erstelle, sodass der Benutzer mit ziemlicher Sicherheit zuerst löschen wird den gesamten Inhalt des Editor-Textfelds aus und geben Sie den Titel ein).

Einige der Dinge, die ich bereits ausprobiert habe:

Festlegen des ausgewählten Bereichs in viewDidAppear (anstelle von und zusätzlich zu textViewDidBeginEditing).Ersetzen Sie _textView.text durch eine Kopie des darin enthaltenen Texts und wenden Sie dann selectedRange (in textViewDidBeginEditing) an.[[_textView webView] selectAll]; (Private API). Gleiches Verhalten, Text wird ohne visuelles Feedback ausgewählt.Senden von _textView setNeedsDisplay und setNeedsLayout.Verwenden eines performSelector ... afterDelay, um den selectedRange so festzulegen, dass er nach dem Beenden von textViewDidBeginEditing erfolgt.

Refs auf S.O .: Hier undHier

// UITextFieldDelegate Methods...
- (void)textViewDidBeginEditing:(UITextView *)_textView
{
 NSInteger len = [_textView.text length];

 if( self.selectInitialText ){
  //NOTE: this is not working as expected. Indeed the text is 
  // selected but the highlighting of the text isn't showing.
  _textView.selectedRange = NSMakeRange(0,len);
 }
}

- BEARBEITEN -
Hier ist das Beispielprojekt, das an Apple BugReporter gesendet wurde.Laden Sie das Beispielprojekt BugReport_7380723 herunter

Zusätzliche Information:

Beim Erstellen und Spielen mit der Vorlage des Beispielprojekts habe ich zwei Dinge entdeckt:

Wenn Text ausgewählt ist, aber keine Hervorhebung angezeigt wird, tippen Sie auf einige Tastenanschläge und dann auf "Schütteln zum Rückgängigmachen". Der ursprüngliche Text wird wiederhergestelltaber ist hervorgehoben.

Wenn Sie in der Textansicht manuell eine Auswahl treffen und dann auf die Schaltfläche "Alle auswählen" tippen [bezieht sich auf das oben verknüpfte Beispielprojekt], wird der gesamte Text ausgewähltUND zeigt die Hervorhebung richtig an.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage