我有一个带有分组静态UITableView的UITableViewController。我在故事板上为我的静态表视图定义单元格。其中一个单元格中有一个文本字段。当调用此文本字段时,键盘会弹出,但是,表视图不会像通常在表视图控制器上那样自动调整大小。所以现在键盘部分覆盖文本区域,我无法向上滚动。
我的理解是,当您使用UITableViewController和tableview时,可调区域应该在调用键盘时自动缩小。它确实在我的应用程序的其他部分中工作,而不是使用此静态表视图。它不适用于静态表吗?还有其他我想念的东西吗?有没有一种简单的方法可以解决这个问题?
由于
答案 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;