在开始编辑时,当键盘存在时,如何使UITextField向上移动?

使用iOS SDK:

我有一个带UITextFields的UIView可以显示键盘。我需要它能够:

  1. 打开键盘后,允许滚动UIScrollView的内容以查看其他文本字段

  2. 自动地;“跳跃”;(通过向上滚动)或缩短

我知道我需要一个UIScrollView。我已尝试将UIView的类更改为UIScrollView,但仍然无法上下滚动文本框

我是否同时需要UIViewUIScrollView?一个在另一个里面吗

要自动滚动到活动文本字段,需要执行哪些操作

理想情况下,尽可能多的组件设置将在Interface Builder中完成。我只想为需要的东西编写代码

注意:我正在使用的UIView(或UIScrollView)由一个选项卡栏(uitabar)打开,它需要正常工作


我添加滚动条只是为了在键盘打开时使用。尽管不需要它,但我觉得它提供了更好的界面,因为用户可以滚动和更改文本框

当键盘上下移动时,我可以更改UIScrollView的帧大小。我只是使用:

-(void)textField开始编辑:(UITextField*)textField{
//键盘变得可见
scrollView.frame=CGRectMake(scrollView.frame.origin.x,
scrollView.frame.origin.y,
scrollView.frame.size.width,
scrollView.frame.size.height-215+50);//调整大小
}
-(void)textfielddidediting:(UITextField*)textField{
//键盘将隐藏
scrollView.frame=CGRectMake(scrollView.frame.origin.x,
scrollView.frame.origin.y,
scrollView.frame.size.width,
scrollView.frame.size.height+215-50);//调整大小
}

然而,这并不是自动的;“向上移动”;或者将下方的文本字段置于可见区域的中心,这正是我真正想要的

  1. 如果您现在拥有的内容不适合iPhone屏幕,您只需要一个滚动视图。(如果添加滚动视图作为组件的超级视图,只是为了在键盘打开时使文本字段向上滚动,则不需要它。)

  2. 防止TextFields被键盘覆盖的标准方法是在显示键盘时上下移动视图

以下是一些示例代码:

为80.0键盘定义kOFFSET
-(无效)键盘将显示{
//设置当前视图的动画,使其不碍事
if(self.view.frame.origin.y>=0)
{
[self-setViewMovedUp:是];
}
else if(self.view.frame.origin.y<0)
{
[self-setViewMovedUp:否];
}
}
-(无效)键盘将隐藏{
if(self.view.frame.origin.y>=0)
{
[self-setViewMovedUp:是];
}
else if(self.view.frame.origin.y<0)
{
[self-setViewMovedUp:否];
}
}
-(无效)textFieldDidBeginEditing:(UITextField*)发送方
{
如果([发送方isEqual:mailTf])
{
//移动主视图,使键盘不会隐藏它。
if(self.view.frame.origin.y>=0)
{
[self-setViewMovedUp:是];
}
}
}
//方法在显示/关闭键盘时向上/向下移动视图
-(无效)setViewMovedUp:(BOOL)movedUp
{
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationDuration:0.3];//如果要向上滑动视图
CGRect rect=self.view.frame;
if(movedUp)
{
//1.向上移动视图的原点,以便隐藏的文本字段位于键盘上方
//2.增大视图的大小,以便覆盖键盘后面的区域。
rect.origin.y-=kOFFSET\u用于键盘;
rect.size.height+=键盘的kOFFSET\u;
}
其他的
{
//恢复到正常状态。
rect.origin.y+=kOFFSET_用于键盘;
rect.size.height-=kOFFSET\u用于键盘;
}
self.view.frame=rect;
[UIView委员会];
}
-(无效)视图将显示:(BOOL)动画
{
[超级视图将显示:动画];
//注册键盘通知
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@选择器(键盘将显示)
名称:UIKeyboardWillShowNotification
对象:无];
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@选择器(键盘将隐藏)
名称:UIKeyboardWillHideNotification
对象:无];
}
-(无效)视图将消失:(BOOL)已设置动画
{
[超级视图将消失:动画];
//在不可见时注销键盘通知。
[[NSNotificationCenter defaultCenter]移除观察者:self
名称:UIKeyboardWillShowNotification
对象:无];
[[NSNotificationCenter defaultCenter]移除观察者:self
名称:UIKeyboardWillHideNotification
对象:无];
}

发表评论