键盘出现后如何移动UITextField?

时间:2015-04-19 12:52:16

标签: ios objective-c keyboard

我正在做一个小项目。它基本上只是一个文本字段,你可以输入一些短文本(基本上只有几个单词),然后你有3个主要按钮(它看起来像一个标签栏)你可以选择按键盘来改变文字或如果你没有输入一个,你可以按颜色从文本的不同颜色中选择,或者你可以按第三个按钮来改变字体。

所以,我刚开始,我有这个问题,如果我按下键盘按钮键盘应该出现,textview应该自动向上移动216px(键盘的高度)我有下面的代码:

frame.origin中的111是y-coordiantes应该移动的位置。

- (IBAction)keyBoardAction:(id)sender {

CGRect frame = _textField.frame;
frame.origin.y = 111;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
_textField.frame = frame;
[UIView commitAnimations];

[_textField becomeFirstResponder];

}

因为它不起作用我在没有textField firstResponder的情况下运行应用程序,因此键盘不会阻止我的视图,我可以在整个过程中观看textField。

当我运行应用程序并按下键盘按钮时,textField首先在屏幕下方向下移动,然后再次向上移动到与开头相同的位置。

1 个答案:

答案 0 :(得分:1)

- (void)registerNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

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


- (void) keyboardWillShow:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];

    NSTimeInterval duration = userInfo ? [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue] : 1.0;

    CGRect keyboardEndFrame;
    [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];

    CGRect newFrame = _textField.frame;
    newFrame.origin.y -= keyboardEndFrame.size.height;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration: duration];
    _textField.frame = newFrame;
    [UIView commitAnimations];

}