2012-05-20 16 views
23

Próbuję ustawić animację widoku, aby poruszał się w górę, gdy klawiatura jest ukrywana i pojawia się w polach tekstowych, a ja działałam doskonale, ale gdy fokus porusza się z jednego pola tekstowego do innej, to nie działa, ponieważ klawiatura była już pokazywana.Detekcja zmiany ostrości dla UITextField

W viewDidLoad, Zarejestrowałem się, co następuje:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 

a następnie w metodach keyboardWillShow i keyboardWillHide, to określa, czy widok należy przenieść lub nie i animować odpowiednio. Ale jeśli klawiatura była już wyświetlona, ​​a użytkownik kliknie na inne pole tekstowe, które wymaga widoku, aby przejść do góry, metoda nie zostanie wywołana. Czy istnieje sposób na wykrycie, czy fokus został zmieniony na inne pole tekstowe, gdy klawiatura była już wyświetlana? Byłoby wspaniale, gdyby można było to zrobić bez konieczności ustawiania wszystkich pól tekstowych na delegatów.

Z góry dziękuję.

Odpowiedz

57

pomocą metod delegata UITextField .. jej lepiej niż na twoim przypadku metod klawiszowych .. kiedy textField dostał skupić - (void)textFieldDidBeginEditing:(UITextField *)textField; zostanie zwolniony .. a kiedy stracił ostrość - (void)textFieldDidEndEditing:(UITextField *)textField; zostanie zwolniony.

+1

Dzięki za odpowiedź. Jeśli to zrobię, czy istnieje sposób na uzyskanie userInfo? Ponieważ w tych metodach uzyskałem UIKeyboardAnimationDurationUserInfoKey i UIKeyboardFrameEndUserInfoKey z userInfo, aby skonfigurować animację, ale nie jestem pewien, w jaki sposób mogę zrobić to samo, gdy nie ma powiadomienia otrzymaniu przekazane jako parametr? – Dennis

+0

jaki rodzaj informacji potrzebujesz? –

+1

UIKeyboardAnimationDurationUserInfoKey, dla czasu trwania animacji klawiatury (aby animacja dla poruszającego się widoku mogła się zgadzać) i UIKeyboardFrameEndUserInfoKey, aby uzyskać wysokość klawiatury. Nie chciałem twardo kodować wartości. – Dennis

6
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField { 
if (textField.tag == 1) { //first textField tag 
    //textField 1 
} 
else { 
    //textField 2 
} 
} 
1

Zastosowanie UITextFieldDelegate

i

func textFieldDidBeginEditing(textField: UITextField) { 
     println("did") 
     if textField.tag == 1{ 
      self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor 
     } 
    } 
+0

W rzeczywistości jest to func textFieldDidBeginEditing (_ textField: UITextField) {podpis funkcji – leofontes