UITableViewController和UITextField键盘
我有一个UITableViewController与分组静态UITableView。我正在为故事板上的静态表格视图定义单元格。其中一个单元格中有一个文本框。当这个文本字段被调用时,键盘弹出,但是,tableview并不像它通常在桌面视图控制器上那样自动调整大小。所以现在键盘部分覆盖了文本框,我无法向上滚动。UITableViewController和UITextField键盘
我的理解是,当您使用UITableViewController和tableview时,可视区域应该在调用键盘时自动缩小。它在我的应用程序的其他部分按照预期工作,而不是使用此静态表视图。它不适用于静态表吗?还有什么我失踪?有没有简单的方法来解决这个问题?
由于
回答
它无关,与静态细胞。他们应该工作。
如果您的控制器已经是UITableViewController,请检查您是否使用了方法viewWillAppear
。如果你这样做,你必须致电[super viewWillAppear:YES]
以获得“自动行为”。
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES]; // This line is needed for the 'auto slide up'
// Do other stuff
}
这个问题变成了很容易,因为控制器的样板代码不来与viewWillAppear
方法调用,如果你在你的控制器定义它,你覆盖它。
额外信息
看看这个链接。
Apple Table View Programming Guide
注:在的UITableViewController的iOS 3.0具有新的功能。 A 表视图控制器支持对表视图行进行内联编辑;如果, 例如,行已在编辑模式嵌入的文本字段,它 滚动行被被 显示的虚拟键盘.... ....嗒嗒
的重要位以上编辑
的的UITableViewController类实现通过重写 的loadView,viewWillAppear中:和其他的方法的上述行为从 UIViewController中继承的。在你的UITableViewController的子类中,你可能会重写这些方法来获取专门的行为。如果你做 重写这些方法,一定要调用超类 执行该方法,通常作为第一个方法调用,得到 的默认行为。
我在这里发布这篇文章后不久发现它与静态表无关。我创建了一个测试静态表,它工作正常,所以我知道这是我的代码。你100%正确。这是[super viewWillAppear:YES] ;.只要我添加到我的viewWillAppear它的工作。我猜想它是如何被删除的。本周我很担心这个问题,结果很简单。谢谢 – Keith
干杯的人。你的问题指向我的文档,我学到了另一个陷阱=) –
伟大的答案,可耻的你没有更多的票。无论如何,这是一个。 –
推动视图向上如果被选择用于编辑的表形式之一(需要键盘通知实现)
- (void) keyboardDidShow:(NSNotification *)aNotification
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount);
[UIView commitAnimations];
isRaised = [NSNumber numberWithBool:YES];
}
调整大小的表(除以2高度)。将其交换到键盘确实显示方法。此外,您可以使用键盘确实隐藏方法来撤销这些东西。
CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, mineTable.frame.size.height/2);
mineTable.frame = temp;
对于斯威夫特
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
}
您可以移动视图向上或手动调整其大小。 – Dustin
问题是为什么它通常不会自动执行它? – Keith
可能因为您正在使用静态表格视图(就像您猜到的一样)。静态表格视图是专门设计的,不会改变 - 这就是为什么他们被称为“静态”的原因 – Dustin