uitableview没有用键盘调整大小

时间:2012-11-29 18:11:54

标签: iphone uitableview

我创建了一个视图控制器。 设置一个包含大量包含文本标签的自定义单元格的tableview。当键盘出现时,tableview的框架不会自动调整大小。界面构建器中是否有一个我缺少的复选框?

我应该检查哪些设置?

2 个答案:

答案 0 :(得分:11)

在视图控制器上添加以下键盘通知事件:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];

根据键盘通知重新调整tableView的框架:

- (void)keyboardDidShow:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];
    CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    CGRect frame = CGRectMake(self.tableView.frame.origin.x, 
                              self.tableView.frame.origin.y, 
                              self.tableView.frame.size.width, 
                              self.tableView.frame.size.height - size.height);
    self.tableView.frame = frame;
}

- (void)keyboardWillHide:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];
    CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, 
                                      self.tableView.frame.origin.y, 
                                      self.tableView.frame.size.width, 
                                      self.tableView.frame.size.height + size.height);
}

如果要向上滚动tapp单元格,请在textFieldDidBeginEditing:方法中执行以下更改:

- (void) textFieldDidBeginEditing:(UITextField *)textField {
    UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview];
    [self.tableView scrollToRowAtIndexPath:[tView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];
} 

答案 1 :(得分:2)

如果您使用UIViewController,则必须在出现键盘时编写调整大小的代码。您可以处理UIKeyboardWillShowNotification, UIKeyboardDidShowNotification, UIKeyboardWillHideNotification, UIKeyboardDidHideNotification以适当调整tableview的大小。