当键盘存在时,如何使 UITextField 向上移动 - 在开始编辑时? [英] How can I make a UITextField move up when the keyboard is present - on starting to edit?

查看:27
本文介绍了当键盘存在时,如何使 UITextField 向上移动 - 在开始编辑时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用 iOS SDK:

With the iOS SDK:

我有一个带有 UITextFieldUIView 可以调出键盘.我需要它才能:

I have a UIView with UITextFields that bring up a keyboard. I need it to be able to:

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

  1. Allow scrolling of the contents of the UIScrollView to see the other text fields once the keyboard is brought up

自动跳转"(向上滚动)或缩短

Automatically "jump" (by scrolling up) or shortening

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

I know that I need a UIScrollView. I've tried changing the class of my UIView to a UIScrollView, but I'm still unable to scroll the textboxes up or down.

我需要 UIViewUIScrollView 吗?一个会进入另一个吗?

Do I need both a UIView and a UIScrollView? Does one go inside the other?

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

What needs to be implemented in order to automatically scroll to the active text field?

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

Ideally as much of the setup of the components as possible will be done in Interface Builder. I'd like to only write code for what needs it.

注意:我正在使用的 UIView(或 UIScrollView)是由标签栏(UITabBar)显示的,它需要正常运行.

Note: the UIView (or UIScrollView) that I'm working with is brought up by a tabbar (UITabBar), which needs to function as normal.

我只是在键盘出现时添加滚动条.尽管它不是必需的,但我觉得它提供了一个更好的界面,因为这样用户就可以滚动和更改文本框,例如.

I am adding the scroll bar just for when the keyboard comes up. Even though it's not needed, I feel like it provides a better interface because then the user can scroll and change textboxes, for example.

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

I've got it working where I change the frame size of the UIScrollView when the keyboard goes up and down. I'm simply using:

-(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
}

然而,这不会自动向上移动";或将下方的文本字段居中放置在可见区域,这正是我真正想要的.

However, this doesn't automatically "move up" or center the lower text fields in the visible area, which is what I would really like.

推荐答案

  1. 如果您现在拥有的内容不适合 iPhone 屏幕,您将只需要一个 ScrollView.(如果您将 ScrollView 添加为组件的超级视图只是为了在键盘出现时使 TextField 向上滚动,则不需要.)

  1. You will only need a ScrollView if the contents you have now do not fit in the iPhone screen. (If you are adding the ScrollView as the superview of the components just to make the TextField scroll up when keyboard comes up, then it's not needed.)

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

The standard way to prevent the TextFields from being covered by the keyboard is to move the view up/down whenever the keyboard is shown.

这是一些示例代码:

#define kOFFSET_FOR_KEYBOARD 80.0

-(void)keyboardWillShow {
    // Animate the current view out of the way
    if (self.view.frame.origin.y >= 0)
    {
        [self setViewMovedUp:YES];
    }
    else if (self.view.frame.origin.y < 0)
    {
        [self setViewMovedUp:NO];
    }
}

-(void)keyboardWillHide {
    if (self.view.frame.origin.y >= 0)
    {
        [self setViewMovedUp:YES];
    }
    else if (self.view.frame.origin.y < 0)
    {
        [self setViewMovedUp:NO];
    }
}

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
    if ([sender isEqual:mailTf])
    {
        //move the main view, so that the keyboard does not hide it.
        if  (self.view.frame.origin.y >= 0)
        {
            [self setViewMovedUp:YES];
        }
    }
}

//method to move the view up/down whenever the keyboard is shown/dismissed
-(void)setViewMovedUp:(BOOL)movedUp
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3]; // if you want to slide up the view

    CGRect rect = self.view.frame;
    if (movedUp)
    {
        // 1. move the view's origin up so that the text field that will be hidden come above the keyboard 
        // 2. increase the size of the view so that the area behind the keyboard is covered up.
        rect.origin.y -= kOFFSET_FOR_KEYBOARD;
        rect.size.height += kOFFSET_FOR_KEYBOARD;
    }
    else
    {
        // revert back to the normal state.
        rect.origin.y += kOFFSET_FOR_KEYBOARD;
        rect.size.height -= kOFFSET_FOR_KEYBOARD;
    }
    self.view.frame = rect;

    [UIView commitAnimations];
}


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // register for keyboard notifications
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

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

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    // unregister for keyboard notifications while not visible.
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                             name:UIKeyboardWillHideNotification
                                           object:nil];
}

这篇关于当键盘存在时,如何使 UITextField 向上移动 - 在开始编辑时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆