我有几个UITextFields会在弹出时被键盘隐藏,所以我实现了UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
并将它们发送到各自的方法:
- (void)keyboardWillShow:(NSNotification*)notification
{
CGFloat height = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
keyBoardHeight = height;
}
- (void)keyboardWillHide:(NSNotification*)notification
{
CGFloat height = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
keyBoardHeight = height;
}
然后我将我的文本字段委托给这个方法:
//TextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)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:
方法在<{strong> textFieldDidBeginEditing:
方法之后运行。因此,keyboardHeight
在代码第一次运行时设置为0,因此我计算的偏移量是偏离的。
如何使keyboardWillShow:
方法在<{strong> textFieldDidBeginEditing:
方法之前运行?我可以使用另一种委托方法吗?
答案 0 :(得分:1)
抱歉,但没有办法做到这一点。您必须在通知观察员内进行键盘处理的动画或其他操作。 这就是Apple推荐的内容,并且在我迄今遇到的所有情况下都能正常使用。
答案 1 :(得分:1)
对于其他试图这样做的人,我找到了一种方法:
保持对当前编辑文本字段的弱引用:
UITextField* editingTextField;
- (void)textFieldDidBeginEditing:(UITextField*)textField
{
editingTextField = textField;
}
- (void)textFieldDidEndEditing:(UITextField*)textField
{
editingTextField = nil;
}
然后在keyboardWillShow:
方法打开时引用弱文本字段来计算相应的偏移并相应地移动视图。
- (void)keyboardWillShow:(NSNotification*)notification
{
//Use editingTextField's frame here
}
答案 2 :(得分:0)
只需使用IQKeyboardManager即可。它是任何视图中所有文本字段的单行代码.Link:https://github.com/hackiftekhar/IQKeyboardManager