UITableViewController和UITextField键盘

时间:2012-07-03 15:13:21

标签: objective-c ios

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

我的理解是,当您使用UITableViewController和tableview时,可调区域应该在调用键盘时自动缩小。它确实在我的应用程序的其他部分中工作,而不是使用此静态表视图。它不适用于静态表吗?还有其他我想念的东西吗?有没有一种简单的方法可以解决这个问题?

由于

3 个答案:

答案 0 :(得分:51)

<强>答案

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

如果您的控制器已经是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中具有新功能。一个   table-view controller支持对表视图行进行内联编辑;如果,   例如,行在编辑模式下嵌入了文本字段   将正在编辑的行滚动到虚拟键盘上方   显示......等等....

重要的一点

  

UITableViewController类通过实现上述行为   覆盖loadView,viewWillAppear:和继承自的其他方法   UIViewController中。在您的UITableViewController的子类中,您可以   还会覆盖这些方法以获取专门的行为。如果你这样做   覆盖这些方法,一定要调用超类   实现该方法,通常作为第一个方法调用,来获取   默认行为。

答案 1 :(得分:1)

对于Swift

override func viewWillAppear(animated: Bool) {

   super.viewWillAppear(animated)

}

答案 2 :(得分: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;