我在iOS中使用了一个长表单,并使用静态表格视图来实现。为了增加prev/next和done功能,我需要添加工具栏。 在这个项目中,我使用了BSKeyboardControls,并且在另一个项目中也已经完成了此操作。
工具栏的功能很好,但是当下一个或前一个textField/textView不可见时,前一个textField上的焦点不会改变,我仍然在此文本字段中输入。 当我手动滚动并且目标下一个文本字段出现时,它会神奇地成为第一个响应者。 这显然不是预期的行为。
所以我想到,在尝试将其设置为第一个响应者之前,我必须将表格视图滚动到相应的字段。 但我无法完成此操作。
我已经尝试过使用indexPathes来实现。
尽管超级父视图是有效的(并且正确)表格单元,但返回的路径为空。我也尝试了一些变化。
工具栏的功能很好,但是当下一个或前一个textField/textView不可见时,前一个textField上的焦点不会改变,我仍然在此文本字段中输入。 当我手动滚动并且目标下一个文本字段出现时,它会神奇地成为第一个响应者。 这显然不是预期的行为。
所以我想到,在尝试将其设置为第一个响应者之前,我必须将表格视图滚动到相应的字段。 但我无法完成此操作。
我已经尝试过使用indexPathes来实现。
NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview];
[self.tableView scrollToRowAtIndexPat:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
尽管超级父视图是有效的(并且正确)表格单元,但返回的路径为空。我也尝试了一些变化。
CGPoint point = [self.tableView convertPoint:textField.frame.origin toView:self.tableView];
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:point];
以及其他使用rects和indexPathsForRowsInRect的变化。
唯一的方法是手动跟踪文本字段单元格的indexPath,但在这种情况下,这不是一个合适的解决方案。
有人有想法如何实现在tableView中滚动到看不见的textField吗?
编辑:
正如Justin Paulson所请求的keyboardControlsPreviousNextPressed:的代码:
- (void)keyboardControlsPreviousNextPressed:(BSKeyboardControls *)controls withDirection:(KeyboardControlsDirection)direction andActiveTextField:(id)textField
{
NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)((UIView *)textField).superview.superview];
NSLog(@"path %@ for cell %@", path, ((UIView *)textField).superview.superview);
[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
[textField becomeFirstResponder];
}
根据日志的输出,路径是空的,而超级父视图是正确的表格视图单元格。
keyboardControlsPreviousNextPressed:withDirection:andActiveTextField:
这个委托函数是什么样子的? - Justin PaulsonkeyboardControlsPreviousNext...
中更改代码,只需写成[textField becomeFirstResponder];
吗?因为UITableViewController
应该会自动为你滚动。 - Justin Paulson