UIKeyboardWillChangeFrameNotification称为BEFORE textViewDidBeginEditing,但AFTER textFieldDidBeginEditing?为什么?

时间:2015-05-19 19:20:19

标签: ios cocoa-touch uitextfield uitextview

我的ViewController中有以下观察者。

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

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

现在,这是一个奇怪的部分。

如果您点按 UITextField ,则通话顺序为textFieldDidBeginEditing,然后是keyboardWillChangeFrame:

如果您点按 UITextView ,则通话顺序为keyboardWillChangeFrame然后' textViewDidBeginEditing'。

任何人都没有看到这个问题?不管是字段还是视图,都不应该首先调用text_Dd -BeginEditing。这是为什么?

导致奇怪的动画问题。我需要它以某种方式保持一致。

2 个答案:

答案 0 :(得分:0)

我相信您可以使用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];
}

答案 1 :(得分:0)

使用UIKeyboardDidChangeFrameNotification而不是UIKeyboardWillChangeFrameNotification。