gpt4 book ai didi

iphone - 事件文本字段上的键盘滚动 - 滚动到 View 之外?

转载 作者:太空狗 更新时间:2023-10-30 03:34:09 25 4
gpt4 key购买 nike

我有一个应用程序,其 View 具有从 View 顶部到 View 底部的文本字段。我需要它在编辑底部字段时滚动以便字段可见,但它似乎无法正常工作。

Apple docs 之后,我将所有这些代码放入我的程序中( list 4-1、4-2),并将 scrollViewactiveField 导出添加到我的头文件并将它们链接到IB。

问题是,只要我点击一个文本字段,所有文本字段就会消失,直到我关闭键盘。他们向下滚动很远(再次,足够远到没有字段可见的地方)。

有谁知道这个问题可能是由什么引起的?

我将 Apple Docs 中的代码放在这里,这样您就可以准确地看到我正在使用的代码,而无需点击离开。

//my .h
IBOutlet UIScrollView *scrollView;
IBOutlet UITextField *activeField;

//.m
// Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];

}

// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;

// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}

// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}

最佳答案

更新:以下答案已过时。现在您可以使用“TPkeyboardavoiding”库来处理 UIScrollView、UITableView 等中的所有类型的文本字段操作。尝试一下,如果有人在集成方面遇到问题,请告诉我。

旧答案

此功能无需注册键盘通知。为了使事件文本字段在键盘上方的屏幕居中,您只需设置 UIscrollView 的 contentOffset 两个方法,如下所示:

// called when textField start editting.
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
[scrollView setContentOffset:CGPointMake(0,textField.center.y-60) animated:YES];
}



// called when click on the retun button.
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{


NSInteger nextTag = textField.tag + 1;
// Try to find next responder
UIResponder *nextResponder = [textField.superview viewWithTag:nextTag];

if (nextResponder) {
[scrollview setContentOffset:CGPointMake(0,textField.center.y-60) animated:YES];
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
} else {
[scrollview setContentOffset:CGPointMake(0,0) animated:YES];
[textField resignFirstResponder];
return YES;
}

return NO;
}

注意:所有 TextField 都应该有增量标签,比如 1、2、3 等等。并将委托(delegate)设置为 self 。

谢谢,

关于iphone - 事件文本字段上的键盘滚动 - 滚动到 View 之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193787/

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