textFieldDidBeginEditing

textFieldDidBeginEditing

我的ViewController中有以下观察者。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

此视图控制器还符合UITextFieldDelegate和UITextViewDelegate,并实现textFieldDidBeginEditingtextViewDidBeginEditing

现在,这是奇怪的部分。

如果您点击 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/

10-12 21:30