滚动到滚动视图/滚动视图中的特定文本字段 当键盘在屏幕上时停止滚动
Posted
技术标签:
【中文标题】滚动到滚动视图/滚动视图中的特定文本字段 当键盘在屏幕上时停止滚动【英文标题】:scroll to a specific textfield in a scrollview/scrollview stop scrolling when keyboard is on screen 【发布时间】:2010-01-01 05:20:57 【问题描述】:我被困在这里了,
我在视图中有一个自定义滚动视图,此滚动视图有一个添加字段按钮,可让用户将新文本字段添加到滚动视图。当用户点击特定的文本字段键盘出现并隐藏文本字段时,为了克服这个问题,我遵循了 UICatalog 示例,但它将整个滚动视图向上移动
为了防止这种情况,我按照 UICatalog 示例进行了操作
-(void)textFieldDidBeginEditing:(UITextField *)sender
if (sender.frame.origin.y>109)
moveScrollViewUpBy=(sender.frame.origin.y-109+10);
[self viewMovedUp:YES];
-(void)viewMovedUp:(BOOL)movedUp
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = formScrollView.frame;
if (movedUp)
if(rect.origin.y == 0.0f)
rect.origin.y -= kOFFSET_FOR_KEYBOARD;
rect.size.height += kOFFSET_FOR_KEYBOARD;
else
if(rect.origin.y != 0.0f)
rect.origin.y += kOFFSET_FOR_KEYBOARD;
rect.size.height -= kOFFSET_FOR_KEYBOARD;
self.formScrollView = rect;
[UIView commitAnimations];
这里
#define kOFFSET_FOR_KEYBOARD 160.0
但这会使滚动视图向上移动,
我希望当我在滚动视图中点击下方的文本字段时...滚动视图滚动并且该文本字段出现....
是否可以这样做....否则建议我一些其他解决方案
我还有一个查询 srollview 只是在键盘停留在屏幕上时停止滚动。有什么办法可以克服这个
【问题讨论】:
【参考方案1】:您可能只想设置 scrollView 的 contentOffset 属性,而不是调整其边界。
【讨论】:
谢谢支持让我试试看【参考方案2】:实现 UITextViewDelegate 并执行以下操作:
- (void)textViewDidBeginEditing:(UITextView *)textView
keyboardShowing = YES; //helper ivar
[self sizeToOrientation];
[self.scrollView scrollRectToVisible:textView.frame animated:YES];
- (void)textFieldDidEndEditing:(UITextField *)textField
keyboardShowing = NO;
[self sizeToOrientation];
辅助方法:
//fit to the appropriate view sizes
- (void)sizeToOrientation
CGSize size;
if( keyboardShowing )
size = CGSizeMake(320, 190); //make room for keyboard
else
size = CGSizeMake(320, 420); //full height with tabbar on bottom
self.scrollView.frame = CGRectMake(0, 0, size.width, size.height);
这对我很有效。
【讨论】:
有更正确的方法可以做到这一点。 sizeToOrientation 方法需要替换为键盘通知。我稍后会更新我的答案。以上是关于滚动到滚动视图/滚动视图中的特定文本字段 当键盘在屏幕上时停止滚动的主要内容,如果未能解决你的问题,请参考以下文章