L'uso del centro notifiche, come descritto in How can I get a textDidChange (like for a UISearchBar) method for a UITextField?, consente di ricevere una notifica quando il testo in un UITextField iOS cambia. Non ho visto una notifica simile per i cambiamenti di selezione. Qual è il modo migliore per rilevare e rispondere ai cambiamenti nella selezione di un UITextField?Qual è il modo migliore per ottenere la notifica delle modifiche alle selezioni UITextField?
risposta
Collegare un metodo utilizzando target/azione all'evento di controllo UIControlEventEditingChanged
nell'istanza di UITextField
. Questo può essere fatto nel builder dell'interfaccia o nel codice aggiungendo una coppia obiettivo/azione al campo di testo e quindi implementando il metodo specificato.
[self.textField addTarget:self action:@selector(textFieldTextChanged:) forControlEvents:UIControlEventEditingChanged];
UITextField
dichiara anche un protocollo UITextFieldDelegate
con i metodi che è possibile implementare nella classe ricevere una notifica di modifiche a un'istanza di UITextField
. Vi raccomando di sentirvi a vostro agio con la delega poiché è un modello comune nel quadro di Cocoa.
Partenza la risposta a how to get selected text from uitextfield in iphone?
Questo link ha una soluzione senza fare confusione con API private:
In breve: sottoclasse UITextField, implementare
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
e controllo se l'intervallo di selezione è cambiato. Ma questo non informa sui tap.
Quindi quello che ho fatto è dopo sottoclassi, osservare la proprietà selectedTextRange
:
-(void)awakeFromNib {
[self addObserver:self forKeyPath:@"selectedTextRange" options:0 context:nil];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
[self notifyDelegateIfNecessary];
}
funziona molto bene in iOS 8.
perché non eseguire l'override [UITextField setSelectedTextRange: (UITextRange *) selectedTextRange] se hai comunque eseguito la sottoclasse di UITextField? Quindi tutti i cambiamenti arrivano in questo posto. – Leo
@Leo 1. Non voglio modificare il comportamento, ricevere solo le notifiche 2. Ho appena controllato PlayGround e penso che non sia possibile sovrascrivere quella funzione. – Krisdigital
Funziona per me (IOS 8 + 9). In questo modo accerro le esigenze di rimuovere l'osservatore nel luogo adatto. – Leo
Non c'è modo semplice per rilevare la selezione in textField
add oggetto proprietà osservatore viewDidAppear
[self.keyboardInputFieldPassword addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
quindi aggiungere la funzione di osservare per la proprietà
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"selectedTextRange"] && self.keyboardInputFieldPassword == object)
[self textFieldDidChangeSelection:self.keyboardInputFieldPassword];
}
Questo catturerà l'intervallo di selezione in UITextField
Per seguire la c onvenzione, si dovrebbe removeObserver in viewDidDisappear
[self.keyboardInputFieldPassword removeObserver:self forKeyPath:@"selectedTextRange" context:nil];
- 1. Qual è il modo migliore per "ripristinare" le modifiche?
- 2. Qual è la migliore strategia per il caricamento delle proprietà?
- 3. Notifica delle modifiche dell'oggetto BLOB BLU
- 4. Qual è il modo migliore per imparare la WCF?
- 5. Il modo migliore per utilizzare la versione "Avanti" del pulsante Invio su UITextField per passare al prossimo UITextField
- 6. Qual è il modo migliore per associare i requisiti alle funzionalità di Redmine?
- 7. Qual è il modo migliore per definire e accedere alle proprietà selezionate in C#?
- 8. Qual è il modo migliore per eseguire jQuery .change()
- 9. Qual è il modo migliore per accedere alle stored procedure nell'ORM di Django
- 10. Qual è il modo migliore per testare un'app per rails?
- 11. Qual è il modo migliore per creare prodotti interni?
- 12. Qual è il modo pitone per passare argomenti alle funzioni?
- 13. Qual è il modo migliore per interrogare il conteggio delle righe da Core Data?
- 14. Qual è il modo migliore per organizzare più sottoview?
- 15. qual è il modo migliore per stampare informazioni con R?
- 16. Qual è il modo migliore per unire le modifiche esterne nel mio repository Git?
- 17. Qual è il modo migliore per distribuire un'app Pylons?
- 18. Qual è il modo migliore per documentare il codice f #?
- 19. Qual è il modo migliore per ottenere la durata di una chiamata API utilizzando Guzzle 6
- 20. Qual è il modo migliore per riutilizzare il parser Lua?
- 21. Qual è la migliore delle app per eventi django?
- 22. Qual è il modo migliore per dividere due oggetti TimeSpan?
- 23. Qual è il modo migliore per gestire più azioni?
- 24. Il modo migliore per ottenere URL multilingue?
- 25. Il modo migliore per gestire le modifiche del database
- 26. Il modo migliore per migrare le modifiche di tabella alle tabelle di sailsjs di produzione
- 27. Qual è il modo migliore per rilevare il colore bianco?
- 28. Che è un modo migliore per rimuovere Notifica osservatore
- 29. Qual è il modo migliore per tracciare l'esecuzione di JavaScript?
- 30. Qual è il modo migliore per effettuare backup automatici?
[ 'UIControlEventEditingChanged'] (http://developer.apple.com/library/ios/documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIControlEventEditingChanged) si riferisce solo alle modifiche del testo. Ad esempio, l'azione si attiva solo quando il testo cambia mentre il campo di testo 'isEditing'. Questo non include i cambiamenti di selezione. – ma11hew28