Impossibile eliminare la tastiera in UITextView
-
12-09-2019 - |
Domanda
Ho una tabella e in una delle celle tengo un UITextView.Quando l'utente lo tocca, viene visualizzata la tastiera.Stavo provando vari modi per sbarazzarmene.Il mio primo approccio è stato quello di rilevare un tocco sulla cella della tabella di UITextView, ma poiché la visualizzazione del testo ne occupa la maggior parte, non è adatta.Poi ho provato ad aggiungere un pulsante alla barra degli strumenti e ogni volta che l'utente lo preme, la tastiera scompare con resignFirstResponder, ma non funzionerà.Sembra che funzioni solo quando sono nella stessa visualizzazione di UITextView resignFirstResponder.Allora come posso sbarazzarmi della tastiera da una vista diversa?
Grazie.
Soluzione
Il metodo di seguito utilizza il tasto INVIO per chiudere la tastiera UITextView.
Nel vostro controller, impostare delegato del UITextView di auto in questo modo:
myTextView.delegate=self;
Quindi aggiungere questo metodo:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
// Any new character added is passed in as the "text" parameter
if ([text isEqualToString:@"\n"]) {
// Be sure to test for equality using the "isEqualToString" message
[textView resignFirstResponder];
// Return FALSE so that the final '\n' character doesn't get added
return FALSE;
}
// For any other character return TRUE so that the text gets added to the view
return TRUE;
}
Questo dovrebbe funzionare se non si sta usando il tasto Invio come tasto vero ritorno (ad esempio l'aggiunta di nuova riga).
Altri suggerimenti
Cosa vuol dire "non funzionerà". Se è il vostro txtView UITe4xtView, vuoi dire che associa il pulsante con un'azione che ha [txtView resignFirstResponder] non funzionerà? Ho usato questo codice prima e funziona per me
Senza conoscere la dimensione dei controlli, né lo scopo, è un po' difficile fornire una raccomandazione valida.Tuttavia, se stai cercando una visualizzazione testo di sola lettura, perché non prendere in considerazione una UILabel?Se conterrà una grande quantità di testo di sola lettura e hai bisogno di una formattazione avanzata, considera un UIWebView con la tua formattazione.
Naturalmente questa risposta potrebbe essere del tutto inappropriata.Puoi chiarire le tue intenzioni, magari mostrare uno screenshot dell'app in corso (non sfruttata, ovviamente)?
provare a deselezionare l'opzione 'modificabile' nel testo Visualizza finestra Attributi in Interface Builder.
questo si ferma la tastiera dal rivelare se l'utente fa clic sul tuo TextView
ho utilizzato per questo tipo di problema, il metodo folowing
- (BOOL)textFieldShouldReturn: tf_some_text_field {
[tf_some_text_field resignFirstResponder];
[tf_another_text_field_in_the_same_view resignFirstResponder];
return YES;
}
Speranza che aiuta ...