2010-08-05 19 views

Odpowiedz

9

W swoim delegatem, funkcja

- (BOOL)textFieldShouldClear:(UITextField *)textField 

jest wywoływana, gdy użytkownik chce wyczyścić pole tekstowe. Jeśli zwrócisz TAK i zadzwonisz pod numer

[textField resignFirstResponder]; 

klawiatura powinna zniknąć. Nie wiem o clearButtonMode, poza tym, że możesz chcieć ustawić go wcześniej, najlepiej przed dodaniem widoku do jego superview.

edit Aby upewnić się, że naprawdę zrezygnować odpowiadającego, spróbuj robić to tylko trochę później:

[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 
+0

Dzięki, jakikolwiek pomysł, dlaczego klawiatura nie znika po wywołaniu textFieldShouldClear jak powyżej? Działa na przykład z textFieldShouldReturn. – Dan

+1

Tak, możliwe, że po wyczyszczeniu, UI zmusza do skupienia się na polu. Spróbuj zrezygnować nieco później, używając linii dodanej do mojej odpowiedzi. – mvds

+1

Wiwaty, wydaje się, że opóźnienie rozwiązało problem! – Dan

5

Opóźnienie nie zrobił” t działa dobrze dla mnie. Zamiast dodałem instancję zmiennej delegatowi:

BOOL cancelEdit; 

Następnie w realizacji Delegat:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (cancelEdit) { 
     cancelEdit = NO; 

     return NO; 
    } else { 
     return YES; 
    } 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    cancelEdit = YES; 

    return YES; 
} 
+0

To jest najlepsze rozwiązanie. – Shmidt

+0

świetne rozwiązanie, dzięki –

35

Jak wspomniano wcześniej wydaje jabłko jest ustawienie ostrości textField po wyczyszczeniu pola.

Rozwiązanie jest dość proste. Wystarczy wyczyścić pole siebie, resignFirstResponder i nie zwraca

-(BOOL)textFieldShouldClear:(UITextField *)textField 
    { 
     textField.text = @""; 
     [textField resignFirstResponder]; 

     return NO; 
    } 
+0

Najlepsze rozwiązanie dla mnie! Wielkie dzięki! –

+0

Nie chcę pokazywać klawiatury, jeśli użytkownik kliknie przycisk czyszczenia, ale jeśli klawiatura jest wyświetlana, nie chcę tego ukrywać. Właśnie usunięto '[textField resignFirstResponder];' z powyższego kodu. –

0

odkryłam to dziwne zachowanie było spowodowane konkurencyjnej gest rozpoznawania że zrezygnował pierwszy responder przed klawiaturą przed textFieldShouldClear: nazwano. Wyglądało na to, że korumpuje pierwszego respondenta.

Jeśli ustawiłeś tę opcję w ten sposób, upewnij się, że anulujeTouchesInView na twoim urządzeniu rozpoznającym gesty jest ustawione na TAK. W ten sposób nie powinieneś robić niczego specjalnego w metodach textFieldShouldClear: lub textFieldShouldBeginEditing: delegate.

Powiązane problemy