mio problema è che programmaticamente l'impostazione del selectedRange di UITextView seleziona il testo, ma non fa indicare visivamente è selezionata. Sembra un bug in OS 3.0/3.1. Ancora più importante, qualsiasi soluzione o suggerimento per ottenere la selezione da visualizzare? (esempio di progetto collegato in fondo al messaggio)UITextView selectedRange non mostrare quando impostato programatically
Come faccio a sapere che è selezionato poiché non ricevo feedback visivo? due ragioni:
- No cursore lampeggiante
- battendo un tasto qualsiasi sulla tastiera cancella il testo nel campo di selezione esistente.
Ho un UITextView in un viewcontroller che consente di modificare un valore modificabile dall'utente. Il controller dell'editor viene aperto quando viene ricevuto un doppio tocco su una riga della tabella, oppure l'utente tocca il pulsante di divulgazione dei dettagli su una riga. Il viewcontroller arriva via presentModalViewController, e nel Method Editor viewWillAppear di VC, ho iniziato la tastiera con [self.textView becomeFirstResponder];
A volte voglio iniziare l'editor con l'intero contenuto del TextView selezionato in modo che l'utente potrebbe semplicemente iniziare a digitare e sarebbe elimina i contenuti esistenti (questo perché creo nuovi elementi con titoli predefiniti quindi è quasi certo che l'utente prima cancelli l'intero contenuto del campo di testo dell'editor, quindi digita il loro titolo).
Alcune delle cose che ho già provato:
- impostare l'intervallo selezionato in viewDidAppear (invece di e in aggiunta a farlo in textViewDidBeginEditing).
- Sostituire _textView.text con una copia del testo al suo interno e quindi applicare il SelectedRange (in textViewDidBeginEditing) ... pensando che se ho a che fare con bug del framework, questo potrebbe aggirarlo.
[[_textView webView] selectAll];
(private api). stesso comportamento, il testo viene selezionato senza feedback visivo.- invio _textView setNeedsDisplay e setNeedsLayout.
- utilizzando un oggetto performSelector ... afterDelay per impostare il valore selezionato in modo che accada dopo l'uscita da textViewDidBeginEditing.
// 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);
}
}
- EDIT -
Ecco il progetto di esempio presentato ad Apple BugReporter.Download BugReport_7380723 sample project
Informazioni aggiuntive:
Durante la creazione e giocare con la presentazione del progetto di esempio, ho scoperto due cose:
quando non c'è testo selezionato, ma non clou visualizzato, toccare alcuni tasti poi " scuotere per annullare "e il testo originale viene ripristinato ma IS evidenziato.
Se si effettua manualmente una selezione nel TextView, quindi toccare il "Seleziona tutto" pulsante [si riferisce al progetto di esempio linkato sopra], viene selezionato tutto il testo E visualizza l'evidenziazione correttamente.
Grazie per il suggerimento di soluzione alternativa. Ma in realtà non è un segnaposto in questo caso. Ho un'entità con un "titolo" modificabile specifico; un segnaposto scompare quando il campo "apre" per la modifica. Il mio testo dovrebbe rimanere ma indicare che è selezionato e quindi un'azione di tastiera sostituirà la selezione, oppure devono toccare il campo per terminare la selezione. Inoltre, un widget di qualsiasi tipo che supporti le selezioni, dovrebbe indicare lo stato selezionato, quindi questo è probabilmente un bug (ho archiviato un bug report subito dopo la pubblicazione qui). Sono più interessato a soluzioni alternative che consentono di visualizzare la selezione. grazie. – wkw