我有一个我正在处理的项目,我想在它出现时调整键盘上方的UITextView
和UITextField
,因为当键盘出现时 TextView 和 TextField 并隐藏在它后面。
这是我的屏幕截图,没有键盘:
还有键盘,
我有一个我正在处理的项目,我想在它出现时调整键盘上方的UITextView
和UITextField
,因为当键盘出现时 TextView 和 TextField 并隐藏在它后面。
这是我的屏幕截图,没有键盘:
还有键盘,
这是一个相当普遍的问题,有各种各样的解决方案。我将一个放在一起,并将其作为我的 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。