Tak więc skonfigurowałem powiadomienie o zdarzeniu dotyczącym wyglądu klawiatury. Rozważmy teraz UITextView i UITextField.Powiadomienia UITextField i klawiatury - dziwna kolejność
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
Selektor jest:
- (void)keyboardWillShow:(NSNotification *)notification {
keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}
W przypadku UITextView metoda pełnomocnik - (void)textViewDidBeginEditing:(UITextView *)textView
wypala PO zastosowano metodę keyboardWillShow:
. Tak więc keyboardSize ma rzeczywisty rozmiar klawiatury i mogę go użyć wewnątrz metody delegowania tekstu.
Jednakże w przypadku UITextField, odpowiedni sposób pełnomocnik - (void)textFieldDidBeginEditing:(UITextField *)textField
wypala PRZED zastosowano metodę keyboardWillShow:
.
Dlaczego tak się dzieje? Jak zdobyć klawiaturę CGSize
w przypadku pola tekstowego, ponieważ teraz zwraca zero, ponieważ delegat pola tekstowego jest nazywany pierwszym, a nie selektorem klawiatury.
Pomógł mi w prosty sposób dispatch_async (mainQueue,^{}). – Andy