我的ViewController中有以下观察者。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
此视图控制器还符合UITextFieldDelegate和UITextViewDelegate,并实现
textFieldDidBeginEditing
和textViewDidBeginEditing
。现在,这是奇怪的部分。
如果您点击 UITextField ,则调用顺序为
textFieldDidBeginEditing
和THEN keyboardWillChangeFrame:
。如果您点击 UITextView ,则调用顺序为
keyboardWillChangeFrame
,然后是“textViewDidBeginEditing”。没有人看到这个问题吗?无论是Field还是View,都不应该首先调用text_____DidBeginEditing。为什么是这样?
这导致了奇怪的动画问题。我需要它与其他方法保持一致。
最佳答案
我相信您可以使用UIKeyboardWillShowNotification和类似上面的代码的内容来进行尝试:
- (void)keyboardWillShowNotification:(NSNotification*)notification {
NSDictionary *info = notification.userInfo;
CGRect r = [info[UIKeyboardFrameEndUserInfoKey] CGRectValue];
r = [self.view convertRect:r fromView:nil];
UIViewAnimationCurve curve = [info[UIKeyboardAnimationCurveUserInfoKey] integerValue];
double duration = [info[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:curve];
[UIView setAnimationDuration:duration];
/* view changes */
[UIView commitAnimations];
}
关于ios - UIKeyboardWillChangeFrameNotification叫在textViewDidBeginEditing之前,但是在textFieldDidBeginEditing之后吗?为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30334368/