我想在用户开始编辑UITextField并且文本字段被键盘隐藏时进行UIScrollView滚动。我正在使用来自以下线程的示例。编辑时无法正常工作时滚动视图
How to make a UITextField move up when keyboard is present
我有我的四个视UITextFields。当第一次显示键盘时,视图不会自动滚动。如果我用显示的键盘单击另一个文本字段,则UIScrollView按照预期滚动。 隐藏键盘(通过点击“完成”按钮)并再次轻敲UITextField会出现同样的问题:UIScrollView首先不滚动,但当焦点转换到另一个文本字段时,它完全滚动。
任何人都可以帮我吗?
在viewDidLoad
我设置的滚动视图
keyboardIsShown = NO;
CGSize scrollContentSize = CGSizeMake(320, 350);
self.scrollView.contentSize = scrollContentSize;
我为键盘通知登录尺寸在viewWillAppear
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:self.view.window];
然后我注销在viewWillDisappear
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
下面的两个方法由通知调用离子。
- (void)keyboardWillShow:(NSNotification *)n {
if (keyboardIsShown) {
return;
}
NSDictionary *userInfo = [n userInfo];
NSValue *boundsValue = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [boundsValue CGRectValue].size;
CGRect viewFrame = self.scrollView.frame;
viewFrame.size.height -= (keyboardSize.height - 50);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.scrollView setFrame:viewFrame];
[UIView commitAnimations];
keyboardIsShown = YES;
}
- (void)keyboardWillHide:(NSNotification *)n {
NSDictionary *userInfo = [n userInfo];
NSValue *boundsValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize = [boundsValue CGRectValue].size;
CGRect viewFrame = self.scrollView.frame;
viewFrame.size.height += (keyboardSize.height - 50);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.scrollView setFrame:viewFrame];
[UIView commitAnimations];
keyboardIsShown = NO;
}
嘿,如果你想在你的“keyboardWillHide:”方法中获得键盘高度,键盘的高度是0吗?你是否在你的方法中设置了一个断点,以查看程序是否进入该方法? – Lepidopteron 2011-04-01 08:53:44
“keyboardWillHide”中键盘的高度为216.当键盘第一次出现时调用'keyboardWillShow',当键盘解散时正确调用'keyboardWillHide'。 – simonbs 2011-04-01 09:00:58