如何在键盘出现时移动底部textFields?

时间:2016-02-14 12:15:50

标签: ios objective-c iphone

在我的视图中的

字段,当我在6,7,8号开始输入文本时,我想在键盘出现时移动我的文本视图。 text-fields only。

5 个答案:

答案 0 :(得分:0)

我有一篇广泛的博客文章解释如何执行此操作:

Shifting views to make room for the keyboard

它的主旨是为键盘添加通知处理程序,键盘将隐藏通知。在这些处理程序中,您可以获得键盘的高度,然后进行一些数学计算,以确定需要多少移动字段,以便键盘不会覆盖它。然后,您可以将视图控制器的视图移动到足以使字段暴露的位置。

它变得比这更复杂,但这些都包含在博客文章中(它是a larger blog post on animating random shapes的一部分,其中包括键盘技术的工作示例。)

答案 1 :(得分:0)

有很多选择。

我正在使用TPKeyboardAvoidingScrollView很长一段时间。现在,我使用IQKeyboardManager更简单,更容易集成。

IQKeyboardManager

答案 2 :(得分:0)

here是Apple关于处理键盘的官方文档。

答案 3 :(得分:0)

- (BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
CGRect frame = self.view.frame;
Float y = frame.origin.y - 70;
frame.origin.y = y;
self.view.frame = frame;
return YES;
}

- (void) textFieldDidEndEditing:(UITextField *)textField{
CGRect frame = self.view.frame;
Float y = frame.origin.y + 70;
frame.origin.y = y;
self.view.frame = frame;
}

如果你在textFieldShouldBeginEditing方法中更改y值(如70,80,...),并在textFieldDidEndEditing方法中为y添加相同的值。

试试这段代码。

答案 4 :(得分:0)

我为你提出了问题的解决方案,我只是得到了。

#define kOFFSET_FOR_KEYBOARD 80.0
@interface ViewController ()
{
   NSInteger tagTF;
}

- (void)viewDidLoad
{
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.
}

-(void)setMovedUp:(BOOL)movedUP
{
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:0.3];
  CGRect rect = self.view.frame;
  if(movedUP)
  {
    rect.origin.y -= kOFFSET_FOR_KEYBOARD;
    rect.size.height += kOFFSET_FOR_KEYBOARD;
  }
  else{
    rect.origin.y += kOFFSET_FOR_KEYBOARD;
    rect.size.height -= kOFFSET_FOR_KEYBOARD;
  }
  self.view.frame = rect;
  [UIView commitAnimations];
}

#pragma mark - UITextFieldDelegate Methods

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
  tagTF = textField.tag;
  if(textField.tag>=6)
  {
    if(self.view.frame.origin.y >= 0)
    {
        [self setMovedUp:YES];
    }
  }
  return YES;
}


-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
   if(textField.tag>=6)
   {
     [self setMovedUp:NO];
   }
   [textField resignFirstResponder];
   return YES;
 }

从我上面的回答中我将textField标记从1设置为8.它完全符合您的要求。请为textField设置委托。