Korzystanie z centrum powiadomień, zgodnie z opisem w How can I get a textDidChange (like for a UISearchBar) method for a UITextField?, umożliwia otrzymanie powiadomienia, gdy tekst w polu UITextField systemu iOS ulegnie zmianie. Nie widziałem podobnego powiadomienia o zmianach w selekcji. Jaki jest najlepszy sposób wykrywania i reagowania na zmiany w wyborze dla UITextField?Jaki jest najlepszy sposób, aby uzyskać powiadomienia o zmianie ustawień UITextField?
Odpowiedz
Podłącz metodę przy użyciu celu/działania do zdarzenia sterującego UIControlEventEditingChanged
w instancji UITextField
. Można to zrobić w konstruktorze interfejsów lub w kodzie, dodając parę cel/działanie do pola tekstowego, a następnie wdrażając określoną metodę.
[self.textField addTarget:self action:@selector(textFieldTextChanged:) forControlEvents:UIControlEventEditingChanged];
UITextField
deklaruje również protokół UITextFieldDelegate
z metod, które można wdrożyć w swojej klasie być powiadamiany o zmianach instancji UITextField
. Zalecam, abyś czuł się komfortowo z delegowaniem, ponieważ jest to wspólny wzorzec w strukturze Cocoa.
Zapoznaj się z odpowiedzią na how to get selected text from uitextfield in iphone?
Ten link ma jedno rozwiązanie bez brudząc z prywatnych apis:
W skrócie: podklasy UITextField, wdrożyć
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
i czek jeśli zakres wyboru się zmienił. Ale to nie informuje o kranach.
Więc co zrobiłem to po podklasy, obserwować właściwość 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];
}
działa bardzo dobrze w systemów iOS 8.
dlaczego nie przesłonić [UITextField setSelectedTextRange: (UITextRange *) selectedTextRange] jeśli tak czy nie podklasy UITextField? Wtedy wszystkie zmiany nadchodzą w tym miejscu. – Leo
@Leo 1. Nie chcę zmieniać zachowania, tylko otrzymywać powiadomienia 2. Właśnie sprawdziłem w PlayGround i myślę, że nie możesz przesłonić tej funkcji. – Krisdigital
To działa dla mnie (IOS 8 + 9). W ten sposób otaczam potrzeby, aby usunąć obserwatora w odpowiednim miejscu. – Leo
Istnieje prosty sposób na wykrycie wyboru w textField
dodawać obiekty mienia obserwatora w viewDidAppear
[self.keyboardInputFieldPassword addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
następnie dodać funkcję obserwować nieruchomości
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"selectedTextRange"] && self.keyboardInputFieldPassword == object)
[self textFieldDidChangeSelection:self.keyboardInputFieldPassword];
}
To uchwycić zakres wyboru w UITextField
Aby śledzić c onvention należy removeObserver w viewDidDisappear
[self.keyboardInputFieldPassword removeObserver:self forKeyPath:@"selectedTextRange" context:nil];
- 1. Jaki jest najlepszy sposób rozpoczęcia animacji po zmianie wartości wiązania?
- 2. Podczas korzystania z TalkBack, jaki jest preferowany sposób powiadomienia użytkownika o zmianie treści TextView?
- 3. Jaki jest najlepszy sposób na zmianę ustawień regionalnych urządzenia (iOS)?
- 4. Najlepszy sposób na wyczyszczenie UITextField
- 5. Jaki jest najlepszy sposób tworzenia powiadomienia o stylu nośnika dla Androida Lollipop przy rozważaniu kompatybilności wstecznej?
- 6. howto otrzymywać powiadomienia o zmianie wolumenu nośników?
- 7. Najlepszy sposób użycia przycisku "Dalej" przycisku Powrót na UITextField, aby przejść do następnego UITextField
- 8. Najlepszy sposób powiadamiania o zmianie właściwości, gdy pole jest zależne od innego
- 9. Jaki jest najlepszy sposób zwiększania wyliczenia?
- 10. Jaki jest najlepszy sposób, aby logować użytkownika programowo w ExpressionEngine
- 11. Jaki jest najlepszy sposób, aby zinterpretować lokalizację użytkownika obok geocoder
- 12. Jaki jest najlepszy sposób w ES6, aby przypisać stałą warunkowo?
- 13. Jaki jest najlepszy sposób, aby dowiedzieć się więcej o implementacji VM poza faktem hakowania kodu?
- 14. Jaki jest najlepszy sposób udokumentowania kodu Perla?
- 15. Jaki jest najlepszy sposób, aby wyświetlić komunikat o błędzie wyrzucony z AUTOFORM MeteorMethod połączeń
- 16. Jaki jest najlepszy sposób przełączania zmiennej binarnej?
- 17. Jaki jest najlepszy sposób na wdrożenie "timera"?
- 18. Jaki jest najlepszy sposób profilowania wykonywania javascript?
- 19. Jaki jest najlepszy sposób tworzenia wewnętrznych produktów?
- 20. Jaki jest najlepszy sposób tworzenia wdrożeń ClickOnce
- 21. Jaki jest najlepszy sposób na naukę Erlanga?
- 22. Jaki jest najlepszy sposób wykonywania jQuery .change()
- 23. Jaki jest sposób Qt, aby uzyskać przecięcie między dwiema QListami?
- 24. Jaki jest najlepszy sposób rejestrowania aktywności użytkowników?
- 25. Django, Jaki jest najlepszy, najszybszy sposób, aby uzyskać tylko pierwszy i ostatni element z czegoś, Customer.objects.xxxx
- 26. Jaki jest najlepszy sposób, aby uzyskać czas trwania połączenia API przy użyciu Guzzle 6
- 27. Jaki jest najlepszy sposób na podzielenie łańcucha, aby uzyskać wszystkie podciągi przez Ruby?
- 28. Jaki jest najlepszy sposób, aby uzyskać najbardziej przydatne dane wyjściowe z oprofila?
- 29. Jaki jest najlepszy sposób, aby uzyskać datę i godzinę w Clojure?
- 30. pole wyboru - powiadomienie o zmianie
[ 'UIControlEventEditingChanged'] (http://developer.apple.com/library/ios/documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIControlEventEditingChanged) odnosi się tylko do edycji tekstu. Oznacza to, że akcja jest uruchamiana tylko wtedy, gdy tekst zmienia się, podczas gdy pole tekstowe 'isEditing'. Nie dotyczy to zmian wyboru. – ma11hew28