2010-04-16 16 views
15

Mam dwa pola tekstowe e-mail i hasło. Poniższy kod działa poprawnie, gdy pola są prezentowane w zwykłym widoku, ale gdy są one na popover, resignFirstResponder nie działa (działa FirstResponder). Parametr textFieldsShouldReturn został wywołany dla obu pól. Masz pomysł, jeśli czegoś brakuje? Dzięki!iPad popover textfield - resignFirstResponder nie odrzuca klawiatury

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 

    if (theTextField == email) { 
     [password becomeFirstResponder]; 
     return NO; 
    } 

    [theTextField resignFirstResponder]; 
    return NO; 
} 
+3

Brzmi jak błąd. Proponuję złożenie raportu na bugreport.apple.com. –

+2

Mając ten sam problem, gdy textFields są w widoku modalnym z modalPresentationStyle = UIModalPresentationFormSheet –

+0

Mam również tego błędu. –

Odpowiedz

1

nie jestem zbyt pewny na ten temat, ale, jak rozumiem hierarchię responder rezygnacji będzie działać tylko wtedy, gdy masz jakiś inny reagował na odpowiedzi.

W zwykłym widoku sam widok jest gotowy. W wyskakującym okienku, być może musisz coś zrobić z twoją wyskakującą klasą (jak reimplementować niektóre metody Responderów), aby to zadziałało.

1

Wystąpił również ten problem. Ale rozwiązałem to, wykonując kolejną kontrolę, która nie jest w popover jako firstResponder, a później zrezygnowałem z niej. Ale nie mam problemu z popover.

2

Jak opisano w sekcji this answer, klawiatura czasami pozostanie na ekranie, gdy widok zostanie przedstawiony w stylu UIModalPresentationFormSheet.

17

Sprawdź this pytanie:

Zastępowanie disablesAutomaticKeyboardDismissal wrócić NO jak poniżej ustalony ten sam problem z kopalni. Należy umieścić ten kod do kontrolera widoku, z którego zainicjować klawiaturę:

- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 
+1

Istnieje jeden specjalny przypadek. Jeśli kontroler widoku znajduje się w kontrolerze UINavigaiton, należy wykonać podklasę UINavigationController i zastąpić wybraną metodę. Więcej informacji można znaleźć na stronie http://stackoverflow.com/questions/3316700/dismiss-keyboard-on-ipad/14879832#14879832. – Quentamia

0

Odpowiedź jest jako możliwego rozwiązania dla innych z podobnym problemem, ale gdzie konwencjonalne leki nie działają.

Podsumowując -

Miałem podobny problem (pod pewnym warunkiem) i próbowałem wszystkiego - bezskutecznie - zawartych w mojej listy możliwych rozwiązań w [OBJ za resignFirstResponder] nadrzędnym z „disablesAutomaticKeyboardDismissal "dla kontrolera widoku, [self.view endEditing: YES]; i mnóstwo innych rzeczy.

Poszedłem po ustaleniu [identyfikatora] aktualnej pierwszej odpowiedzi, aby odkryć, że była zerowa. Naciśnięcie klawisza "Gotowe" na klawiaturze lub użycie dowolnej z powyższych metod nic nie zmieniło - klawiatura pozostała - nawet po dotknięciu innego pola wprowadzania.

Ekran był zasadniczo ViewController z UITableView z polem wprowadzania tekstu w każdej komórce - łącznie 7 lub 8. Stuknięcie w dowolną komórkę spowoduje wyświetlenie klawiatury zgodnie z oczekiwaniami, a stuknięcie w osobny przycisk "Dalej" (aby ukryć klawiaturę i inne przetwarzanie) działało zgodnie z oczekiwaniami. Jednak w trybie poziomym ostatnie pole zostało zakryte przez klawiaturę, co wymagało przewinięcia tabeli w celu jej ujawnienia.

Po przewinięciu i naciśnięciu ostatniego pola wprowadzania danych klawiatura nie mogła zostać odrzucona - bez względu na wszystko. Jedynym zadaniem było przewinięcie stołu z powrotem pod klawiaturę, a następnie dotknięcie przycisku "dalej". To nie ma sensu.

Prawie w momencie rezygnacji (i zastosowania obejścia) rozwiązaniem, które działało, było uczynienie tego ostatniego pola wprowadzania pierwszym rzecznikiem (mimo, że już miał migający kursor), a następnie zrezygnowanie z funkcji WyprzedażResponder po tym.

Tak;

`- (void) {actionNext

[[m_arrInputFields objectAtIndex:7] becomeFirstResponder]; 
[[m_arrInputFields objectAtIndex:7] resignFirstResponder]; 

}`

rozwiązaniu problemu - natomiast [m_arrInputFields objectAtIndex: #any drugiej Wskaźnik] nie!

Byłoby wspaniale, gdyby ktokolwiek mógł zapewnić jasność lub wyjaśnienie tego - w przeciwnym razie - mam nadzieję, że zaoszczędzi to komuś jeszcze kilka godzin pracy!

Powiązane problemy