当键盘出现时 - 如何开始编辑时,如何让UITextField向上移动?

当键盘出现时 - 如何开始编辑时,如何让UITextField向上移动?

使用iOS SDK:

我有一个UIView带有UITextField键盘的s。我需要它能够:

  1. UIScrollView一旦键盘出现,允许滚动内容以查看其他文本字段

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

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

我需要a UIView和a UIScrollView吗?一个人进去另一个吗?

需要实现什么才能自动滚动到活动文本字段?

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

注意:我正在使用的UIView(或UIScrollView)是由tabbar(UITabBar)启动的,它需要正常运行。


编辑:我正在添加滚动条,仅用于键盘出现时。即使它不需要,我觉得它提供了更好的界面,因为用户可以滚动和更改文本框。

我已经让它工作,我改变UIScrollView了键盘上下的框架大小。我只是使用:

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    //Keyboard becomes visible
    scrollView.frame = CGRectMake(scrollView.frame.origin.x, 
                     scrollView.frame.origin.y, scrollView.frame.size.width,scrollView.frame.size.height - 215 + 50);   
                     //resize}-(void)textFieldDidEndEditing:(UITextField *)textField {
   //keyboard will hide
    scrollView.frame = CGRectMake(scrollView.frame.origin.x, 
       scrollView.frame.origin.y, 
     scrollView.frame.size.width,
      scrollView.frame.size.height + 215 - 50); //resize}

但是,这不会自动“向上移动”或将可见区域中的下部文本字段居中,这是我真正想要的。


Qyouu
浏览 681回答 4
4回答

狐的传说

实际上,最好只使用Apple的实现,如文档中所提供的那样。但是,他们提供的代码是错误的。将keyboardWasShown:评论下方的部分替换为以下内容:NSDictionary* info = [aNotification userInfo];CGRect keyPadFrame=[[UIApplication sharedApplication].keyWindow convertRect:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] fromView:self.view];CGSize kbSize =keyPadFrame.size;CGRect activeRect=[self.view convertRect:activeField.frame fromView:activeField.superview];CGRect aRect = self.view.bounds;aRect.size.height -= (kbSize.height);CGPoint origin =  activeRect.origin;origin.y -= backScrollView.contentOffset.y;if (!CGRectContainsPoint(aRect, origin)) {    CGPoint scrollPoint = CGPointMake(0.0,CGRectGetMaxY(activeRect)-(aRect.size.height));    [backScrollView setContentOffset:scrollPoint animated:YES];}Apple代码的问题是这些:(1)它们总是计算点是否在视图的框架内,但它是a ScrollView,所以它可能已经滚动,你需要考虑该偏移:origin.y -= scrollView.contentOffset.y(2)他们将contentOffset移动键盘的高度,但我们想要相反(我们想要移动contentOffset屏幕上可见的高度,而不是不是):activeField.frame.origin.y-(aRect.size.height)

汪汪一只猫

在textFieldDidBeginEditting和textFieldDidEndEditing通话功能[self animateTextField:textField up:YES],如下所示:-(void)textFieldDidBeginEditing:(UITextField *)textField  {      [self animateTextField:textField up:YES]; }- (void)textFieldDidEndEditing:(UITextField *)textField{     [self animateTextField:textField up:NO];}-(void)animateTextField:(UITextField*)textField up:(BOOL)up{     const int movementDistance = -130; // tweak as needed     const float movementDuration = 0.3f; // tweak as needed     int movement = (up ? movementDistance : -movementDistance);      [UIView beginAnimations: @"animateTextField" context: nil];     [UIView setAnimationBeginsFromCurrentState: YES];     [UIView setAnimationDuration: movementDuration];     self.view.frame = CGRectOffset(self.view.frame, 0, movement);     [UIView commitAnimations];}我希望这段代码可以帮到你。在Swift 2中func animateTextField(textField: UITextField, up: Bool) {      let movementDistance:CGFloat = -130      let movementDuration: Double = 0.3      var movement:CGFloat = 0      if up       {          movement = movementDistance     }      else       {          movement = -movementDistance     }      UIView.beginAnimations("animateTextField", context: nil)      UIView.setAnimationBeginsFromCurrentState(true)      UIView.setAnimationDuration(movementDuration)      self.view.frame = CGRectOffset(self.view.frame, 0, movement)      UIView.commitAnimations()}func textFieldDidBeginEditing(textField: UITextField) {     self.animateTextField(textField, up:true)}func textFieldDidEndEditing(textField: UITextField) {     self.animateTextField(textField, up:false)}SWIFT 3 func animateTextField(textField: UITextField, up: Bool)     {         let movementDistance:CGFloat = -130         let movementDuration: Double = 0.3         var movement:CGFloat = 0         if up        {             movement = movementDistance        }         else         {             movement = -movementDistance        }         UIView.beginAnimations("animateTextField", context: nil)         UIView.setAnimationBeginsFromCurrentState(true)         UIView.setAnimationDuration(movementDuration)         self.view.frame = self.view.frame.offsetBy(dx: 0, dy: movement)         UIView.commitAnimations()     }     func textFieldDidBeginEditing(textField: UITextField)     {         self.animateTextField(textField: textField, up:true)     }     func textFieldDidEndEditing(textField: UITextField)     {         self.animateTextField(textField: textField, up:false)     }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS