键盘显示和隐藏时调整tableview的大小

时间:2012-04-19 13:48:07

标签: iphone ios uitableview keyboard uitextfield

我有一个带有UITableView和UITextField的视图控制器。我订阅了关于键盘何时打开和关闭的通知,并使用有关键盘高度的信息来调整UITableView和UITextField的大小和位置。

但我有两个问题。

当键盘打开时,UITextField似乎会自动重新定位 - 如果它被正确定位,那就没问题了。它的垂直偏移似乎与Tab Bar Controller的高度相同。

如何在键盘打开时禁用UITextField尝试重新发布itsel?

第二个问题是,当键盘打开时,UITableView的表格部分似乎太长了 - 我可以滚动远远低于表格中的最后一个元素(我想类似于键盘的高度)。当键盘打开时,我设置UITableView的新高度(kbSize是键盘的大小):

CGSize size = self.view.frame.size;
self.tableView.frame = CGRectMake(0,0f, 0,0f, size.width, size.height - kbSize.height);

我在这里缺少什么?我是否需要设置表格的“高度”而不仅仅是框架?

谢谢,Ole

2 个答案:

答案 0 :(得分:3)

如果您将父类从UIViewController更改为UITableViewController,则在键盘显示的同时调整视图大小将由操作系统完成。

答案 1 :(得分:1)

你只需要1个viewcontroller类和里面的put tableview当键盘将弹出jest设置viewcontroller框架y = y-140 ...... 像这样

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];

    scrollView.frame = CGRectMake(0, -140, 320, 460);
    [UIView commitAnimations];
    return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];
    scrollView.frame = CGRectMake(0, 0, 320, 460);
    [UIView commitAnimations];
    [textField resignFirstResponder];
    return YES;
}