gpt4 book ai didi

ios - UIKeyboardWillChangeFrameNotification 在 textViewDidBeginEditing 之前调用,但在 textFieldDidBeginEditing 之后调用?为什么?

转载 作者:行者123 更新时间:2023-12-01 16:33:37 30 4
gpt4 key购买 nike

我的 ViewController 中有以下观察者。

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

此 View Controller 还符合 UITextFieldDelegate 和 UITextViewDelegate 并实现了 textFieldDidBeginEditingtextViewDidBeginEditing

现在,这是奇怪的部分。

如果您点击 UITextField,调用顺序为 textFieldDidBeginEditing 然后是 keyboardWillChangeFrame:

如果您点击 UITextView,调用顺序是 keyboardWillChangeFrame 然后是 'textViewDidBeginEditing'。

没有人认为这有问题吗?不应该先调用 text_____DidBeginEditing,无论它是 Field 还是 View。这是为什么?

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

最佳答案

我相信您可以使用 KeyboardWillShowNotification,以及类似上述代码的内容来实现您要执行的操作:

- (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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com