11

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

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

谢谢

4

3 回答 3

55

回答

它与静态单元格无关。他们应该工作。

如果您的控制器已经是 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 表视图编程指南

注意:UITableViewController 在 iOS 3.0 中有新功能。表格视图控制器支持表格视图行的内联编辑;例如,如果行在编辑模式下嵌入了文本字段,它会在显示的虚拟键盘上方滚动正在编辑的行......等等......

重要的一点

UITableViewController 类通过重写 loadView、viewWillAppear: 和其他继承自 UIViewController 的方法来实现上述行为。在你的 UITableViewController 的子类中,你也可以重写这些方法来获得特殊的行为。如果您确实重写了这些方法,请确保调用该方法的超类实现,通常作为第一个方法调用,以获得默认行为。

于 2012-07-08T05:48:35.563 回答
2

对于斯威夫特

override func viewWillAppear(animated: Bool) {

   super.viewWillAppear(animated)

}
于 2014-10-21T14:59:40.960 回答
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;
于 2012-07-03T15:27:11.903 回答