2012-07-03 73 views
9

我有一个UITableViewController与分组静态UITableView。我正在为故事板上的静态表格视图定义单元格。其中一个单元格中有一个文本框。当这个文本字段被调用时,键盘弹出,但是,tableview并不像它通常在桌面视图控制器上那样自动调整大小。所以现在键盘部分覆盖了文本框,我无法向上滚动。UITableViewController和UITextField键盘

我的理解是,当您使用UITableViewController和tableview时,可视区域应该在调用键盘时自动缩小。它在我的应用程序的其他部分按照预期工作,而不是使用此静态表视图。它不适用于静态表吗?还有什么我失踪?有没有简单的方法来解决这个问题?

由于

+0

您可以移动视图向上或手动调整其大小。 – Dustin

+1

问题是为什么它通常不会自动执行它? – Keith

+0

可能因为您正在使用静态表格视图(就像您猜到的一样)。静态表格视图是专门设计的,不会改变 - 这就是为什么他们被称为“静态”的原因 – Dustin

回答

48

回答

它无关,与静态细胞。他们应该工作。

如果您的控制器已经是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的子类中,你可能会重写这些方法来获取专门的行为。如果你做 重写这些方法,一定要调用超类 执行该方法,通常作为第一个方法调用,得到 的默认行为。

+0

我在这里发布这篇文章后不久发现它与静态表无关。我创建了一个测试静态表,它工作正常,所以我知道这是我的代码。你100%正确。这是[super viewWillAppear:YES] ;.只要我添加到我的viewWillAppear它的工作。我猜想它是如何被删除的。本周我很担心这个问题,结果很简单。谢谢 – Keith

+1

干杯的人。你的问题指向我的文档,我学到了另一个陷阱=) –

+1

伟大的答案,可耻的你没有更多的票。无论如何,这是一个。 –

0

推动视图向上如果被选择用于编辑的表形式之一(需要键盘通知实现)

- (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; 
+1

这是完整的答案吗?似乎有些事情不见了。 – Keith

+0

嗯,我不想让你看到一堆你已经知道如何编码的东西。我确实告诉你该怎么做(实现键盘通知)。这只是一些示例代码,可以让您指出正确的方向。 – Dustin

1

对于斯威夫特

override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 

}