移动位于键盘下的内容

时间:2014-06-25 15:00:15

标签: ios objective-c keyboard

我有一个关于“移动位于键盘下的内容”的问题。

我有一个简单的“登录”视图,其中包含2个UITextFields(用户名和密码)和一个登录按钮。 当用户点击其中一个文本字段时,键盘出现并阻止登录按钮和密码文本字段。 所以我实现了Apple和另外一个提出的解决方案(见下面的链接):

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html

http://ios-blog.co.uk/tutorials/how-to-make-uitextfield-move-up-when-keyboard-is-present/

但问题是键盘首先移动,只有当键盘完成移动时才会移动2 UITextFields和登录按钮。因此,它不是用户体验的最佳解决方案...... 你知道我可以在同时移动键盘和2个UITextFields吗?就像在iOS Facebook登录页面上一样。

谢谢!

3 个答案:

答案 0 :(得分:1)

收到 UIKeyboardWillShowNotification 时,只需转移内容即可。而不是 UIKeyboardDidShowNotification

<强>更新

此外,如果您需要添加动画,可以使用键盘通知中的 userInfo 来获取键盘高度,新兴速度和动画曲线。

所以这段代码应该对 UIKeyboardWillShowNotification 做出反应:

[UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] delay:0.0f options:[note.userInfo[UIKeyboardAnimationCurveUserInfoKey] intValue] animations:^{
    // TODO: shift content here
} completion:nil];

您还需要类似 UIKeyboardWillHideNotification 的内容。差异只是在动画块内移动的方向。

答案 1 :(得分:1)

在这种情况下,您应截取UIKeyboardWillShowNotification通知并使用动画块动画地偏移您的内容。

[UIView animateWithDuration:0.5 animations:^{
    // your own animation code 
    // ...
} completion:nil];`

UIKeyboardWillHideNotification通知也一样。

当然,如果你使用已经动画的方法滚动内容,你可以放置它而不需要动画块。

答案 2 :(得分:1)

嗯,你可以通过两种方式做到这一点:简单方法和艰难方式。

简单方法:使用TableViewController并创建包含文本字段的自定义单元格,而不是ViewController。当键盘上升时,TableViewController将负责为您移动视图。然后你需要担心的是,只要你想让键盘消失,就可以解雇键盘。

困难之处:使用ViewController。 要使其工作,您需要有2个通知,例如这些通知(将其放在viewDidLoad方法中):

        // Keyboard notifications so things can move up when the keyboard shows up
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

然后你需要创建你在NotificationCenter中调用的2种方法,以实际执行屏幕的移动:

- (void) keyboardWillShow: (NSNotification*) aNotification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect rect = [[self view] bounds];
    rect.origin.y -= 150;
    [[self view] setFrame: rect];
    [UIView commitAnimations];
}

// Call this to make the keyboard move everything down
- (void) keyboardWillHide: (NSNotification*) aNotification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect rect = [[self view] frame];
    if (rect.origin.y == -150)
    {
        rect.origin.y += 150;
    }
    [[self view] setFrame: rect];
    [UIView commitAnimations];
}

在此代码中,值150是键盘上/下的任意点数。无论屏幕大小如何,您都可以更改它或进行一些花哨的计算以获得屏幕的百分比。

希望它有所帮助!