Disabilitare Lente d'ingrandimento in UITextField
-
21-08-2019 - |
Domanda
C'è un modo per impedire all'utente di spostare il cursore in un'UITextField? Mi piacerebbe che rimanga alla fine della stringa.
Soluzione
Non c'è alcun modo per impedire loro di spostare il cursore. È possibile, tuttavia, impedire loro di modifica del testo tranne che alla fine implementando la
– textField:shouldChangeCharactersInRange:replacementString:
metodo nella delegato del campo di testo.
Edit: è anche possibile impostare userInteractionEnabled
a NO
in modo che l'utente non può toccare il campo. Chiama becomeFirstResponder
manualmente in modo che il campo viene messa a fuoco in quanto l'utente non può toccare a fuoco.
Altri suggerimenti
Questa è una vecchia questione, ma mi era alla ricerca di una risposta alla stessa domanda, e ha trovato una soluzione.
In realtà è abbastanza semplice per impedire all'utente di spostare il cursore. Basta sottoclasse UITextField e fornire la seguente implementazione di caretRectForPosition:
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
return [super caretRectForPosition:self.endOfDocument];
}
NO SUBCLASS necessario .
Si potrebbe utilizzare UITextFieldDelegate
. Si farà disabilitare ingrandimento selezione di vetro e di testo.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
textField.userInteractionEnabled = NO;
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
textField.userInteractionEnabled = YES;
}
. NB: Questo è solo un bypass
Io suggerirei di controllare i gestureRecognizers Proprietà.
Troverete un sacco di loro nella matrice e potrebbe desiderare di rimuovere tutti o per trovare quelli che attiva l'evento che si desidera intercettare e rimuovere / sostituirlo.
L'ho usato per rimuovere copia / incolla e ingrandimento funzionalità di vetro da un UITextField
Non controllare se è possibile disattivare la lente, ma il metodo consigliato per disabilitare selettivamente comportamento modifica in un UIResponder (e quindi un'UITextField) hanno è quello di attuare canPerformAction:withSender
di UIResponder
.
Vedere documentazione UIResponder
Forse se si torna "NO" per l'azione di selezione e selectAll è possibile disattivarla.
Un altro, più brutale, modo è quello di intercettare qualsiasi evento di tocco e ripristinare il cursore alla fine.