-4

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

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

在此处输入图像描述

还有键盘,

在此处输入图像描述

4

1 回答 1

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 设置为发送者,然后将 activeCell 设置为与该字段对应的单元格。

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

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

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

于 2013-09-06T15:18:57.657 回答