OGeek|极客世界-中国程序员成长平台

标题: ios - TextField 显示时获取 UIKeyboard 高度 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 12:42
标题: ios - TextField 显示时获取 UIKeyboard 高度

我有几个 UITextFields 在弹出时会被键盘隐藏,所以我实现了 UIKeyboardWillShowNotificationUIKeyboardWillHideNotification 并将它们发送到各自的方法:

- (void)keyboardWillShowNSNotification*)notification
{
    CGFloat height = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
    keyBoardHeight = height;
}

- (void)keyboardWillHideNSNotification*)notification
{
    CGFloat height = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
    keyBoardHeight = height;
}

然后我将我的文本字段委托(delegate)给此方法:

//TextFieldDelegate
- (void)textFieldDidBeginEditingUITextField *)textField
{
    float keyboardOffset = [self offsetForKeyboard:textField.frame.origin.y withHeight:textField.frame.size.height];
    NSLog(@"%f, %f", keyBoardHeight, keyboardOffset);

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.1];
    self.view.frame = [Global rect:self.view.frame withNewY:-[self offsetForKeyboard:textField.frame.origin.y withHeight:textField.frame.size.height]];
    [UIView commitAnimations];
}

代码运行正常,但是当我运行代码时,keyboardWillShow: 方法在 textFieldDidBeginEditing: 方法之后运行。正因为如此,代码第一次运行时 keyboardHeight 被设置为 0,所以我计算的偏移量是很远的。

如何使 keyboardWillShow: 方法在 textFieldDidBeginEditing: 方法之前运行?我可以使用其他委托(delegate)方法吗?



Best Answer-推荐答案


抱歉,没有办法。您必须在 在通知观察者内 制作动画或进行键盘处理的任何操作。 这是 Apple 推荐的,并且在我迄今为止遇到的所有情况下都适用。

Apple's Keyboard Guide

关于ios - TextField 显示时获取 UIKeyboard 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901665/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4