在键盘上自动调整UITextView和UITextField

时间:2013-09-06 15:13:14

标签: iphone ios objective-c uitextfield uitextview

我有一个项目,我正在这个时间工作,我想调整键盘上方的UITextViewUITextField,因为当键盘出现TextView和TextField并隐藏在后面它

这是我的屏幕截图, 没有键盘:

enter image description here

使用键盘,

enter image description here

1 个答案:

答案 0 :(得分:1)

这是一个相当普遍的问题,有各种各样的解决方案。我把它放在一起,使它成为我的EnkiUtils软件包的一部分,你可以从https://github.com/pcezanne/EnkiUtils下载

简短版本:您想要查看键盘事件并调用Enki keyboardWasShown方法,将其传递给当前视图(如果您在表格中,则传递给单元格)。

长版本:以下是我博客中的文字(http://www.notthepainter.com/expose-the-uitextfield-when-keyboard-is-shown/

请注意,它是一个类方法,而不是实例方法。我保留了一个名为EnkiUtilities的课程来保存有用的东西。要调用它,我们首先设置我们的观察者:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification object:nil];

在keyboardWasShown方法中,我们调用了实用程序方法:

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    [EnkiUtilities keyboardWasShown:aNotification view:self scrollView:myTableView activeField:activeField activeCell:activeCell];

}

那么什么是activeField和activeCell?让我们看看我们的textViewDidBeginEditing方法,看看它们是如何设置的

-(void)textViewDidBeginEditing:(UITextView *)sender
{           
    activeField = sender;

    if ([sender isEqual:descriptionTextView]) {
        activeCell = descriptionCell;
        if (shouldClearDescription) {
            [descriptionTextView initWithLPLStyle:@""];
            shouldClearDescription = false;
        } 
    }else if ([sender isEqual:hintTextView]) {
        activeCell = hintCell;
        if (shouldClearHint) {
            [hintTextView initWithLPLStyle:@""];
            shouldClearHint = false;
        }    
    } else {
        activeCell = nil;
    }
}

当UITextField开始编辑时调用此方法。我将activeField设置为sender,然后将activeCell设置为与该字段对应的单元格。

唯一剩下的就是在键盘消失时恢复视图。

- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    myTableView.contentInset = contentInsets;
    myTableView.scrollIndicatorInsets = contentInsets;
}

当你在没有UITableView的情况下工作时,只需将文本字段放入UIScrollView并将其传递给keyboardWasShown,而不是UITableView。