gpt4 book ai didi

iphone - 使用 UIScrollView 隐藏键盘,不会出现任何故障

转载 作者:行者123 更新时间:2023-12-03 20:58:37 25 4
gpt4 key购买 nike

我有多个可编辑的文本字段,其中一些被键盘覆盖。所以我使用了 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 方法..但是当键盘隐藏时它们会导致故障。

最佳答案

使用此方法处理多个文本字段和键盘

-(void)scrollViewToCenterOfScreen:(UIView *)theView 
{
CGFloat viewCenterY = theView.center.y;
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];

CGFloat availableHeight = applicationFrame.size.height - 200; // Remove area covered by keyboard  

CGFloat y = viewCenterY - availableHeight / 2.0;
if (y < 0) {
y = 0;
}
[scrollview setContentOffset:CGPointMake(0, y) animated:YES];

}


call it in textfield delegate=
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self scrollViewToCenterOfScreen:textField];
}

and set scroll view frame in the below textfield delegate=
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[self.scrollview setContentOffset:CGPointMake(0, 0) animated:YES];
return YES;
}

关于iphone - 使用 UIScrollView 隐藏键盘,不会出现任何故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960024/

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