【发布时间】:2011-02-26 22:48:50
【问题描述】:
我有多个可编辑的文本文件,其中一些被键盘覆盖。所以我用了 UIScrollView,效果很好。
问题是我想隐藏键盘。如果我向下滚动,在键盘隐藏后,一切都会像开始时一样跳起来(没有键盘)。我想在键盘隐藏时对这部分进行补间。
到目前为止,我得到了这段代码(键盘事件的 2 种方法):
-(void)keyboardWillShow:(NSNotification *)notif{
if(keyboardVisible)
return;
keyboardVisible = YES;
NSDictionary* info = [notif userInfo];
NSValue* value = [info objectForKey:UIKeyboardBoundsUserInfoKey];
CGSize keyboardSize = [value CGRectValue].size;
CGRect viewFrame = self.view.frame;
viewFrame.size.height -= keyboardSize.height;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[scrollView setFrame:viewFrame];
[UIView commitAnimations];
}
- (void)keyboardWillHide:(NSNotification *)notif{
if(!keyboardVisible)
return;
keyboardVisible = NO;
NSDictionary* info = [notif userInfo];
NSValue* value = [info objectForKey:UIKeyboardBoundsUserInfoKey];
CGSize keyboardSize = [value CGRectValue].size;
CGRect viewFrame = self.view.frame;
viewFrame.size.height += keyboardSize.height;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[scrollView setFrame:viewFrame];
[UIView commitAnimations];
}
隐藏键盘效果很好,但不幸的是当用户从一个文本字段切换到另一个文本字段时它不起作用。它将一个接一个地触发keyboardWillHide 和keyboardWillShow 事件。这将产生两个动画,第二个会打断第一个。看起来不太好。
问题是即使键盘不会隐藏,keyboardWillHide 也会触发。那时我不知道键盘是否会再次显示。
我也尝试过使用 UIScrollView scrollRectToVisible 和 setContentOffset 方法。但是当键盘隐藏时它们会导致故障。
【问题讨论】:
标签: iphone objective-c keyboard uiscrollview