当用户点击键盘的“下一步”按钮时,我正在尝试调整滚动视图。棘手的部分是我以编程方式生成自定义表格单元格。每个单元格都有一个文本字段。它看起来像这样:
我尝试跟随Apple's instructions移动键盘后面的内容,但我发现它对这个实例不太有效,主要是因为UIKeyboardDidShowNotification只被调用一次,而不是每次都被调用“按钮被点击。
我的解决方案是重新连接Apple的示例,使用UIKeyboardDidShowNotification存储键盘高度,使用textFieldDidBeginEditing来处理滚动视图调整。
以下是我(尝试)调整滚动视图的方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbHeight, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
CGRect aRect = self.view.frame;
aRect.size.height -= kbHeight;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbHeight);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
在此函数中,if块永远不会触发。我使用了几个NSLog语句来查找activeField的每个实例报告相同的原点(尽管在应用程序运行时没有共享可见原点)。
我知道activeField变量正在正确更新,因为我已将其转储到日志中,并且每次调用此函数时字段的标记都不同。
所以,我的问题 - 我认为 - 是:如何以编程方式生成包含文本字段的自定义表格单元格以获得正确的原点?
答案 0 :(得分:2)
tableView是一个scrollview,我认为你不应该通过将tableView包装在scrollView中来引入新的复杂性。
要将TableView滚动到certein单元格,您可以使用:scrollToRowAtIndexPath:atScrollPosition:animated:
。
如果键盘隐藏了需要滚动到视线的底行,只需减小tableView的高度即可。您可以在委托调用和通知传递的userInfo字典中获取键盘的框架。
答案 1 :(得分:0)
Subview根据他们的超级视图设置frame
。因此,在每个单元格内,textField
位于同一位置。因此,您为每个文本字段获取相同的来源。你想要的是细胞的框架。假设该单元格是textField
的父级。您可以执行此操作activeField.superview.frame
而不是activeField.frame
。