我有一个问题,当在a textField
中单击a时UITableViewCell
,该方法tableView:didSelectRowAtIndexPath:
不会被调用.问题是,我需要将我滚动tableView
到正确的位置,否则键盘会在第一个响应者上方.
我必须像这样移动代码:
[[self tableView] scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
进入我的tableView
委托方法和我的UITextField
委托方法,textFieldDidBeginEditing:
.
是创建新方法的最佳方法,将单击的单元格/文本字段的indexPath传递给它,并从tableView委托和UITextField
委托调用该方法?更好的办法吗?
我发现以下效果很好(假设你在表视图控制器中)
- (void)textFieldDidBeginEditing:(UITextField *)textField{ CGPoint pnt = [self.tableView convertPoint:textField.bounds.origin fromView:textField]; NSIndexPath* path = [self.tableView indexPathForRowAtPoint:pnt]; [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES]; }
有几种方法可以解决这个问题.会发生的事情是tableViewCell将触摸事件委托给其子视图,这会导致文本字段处理触摸而不是您的单元格.
解决这个问题:
将UITextfield的userinteractionEnabled属性设置为NO,然后当您获得didSelectRowAtIndexPath消息时,重新启用userInteractionEnabled并调用TextField的becomeFirstResponder.在v2.2上你甚至不需要设置userInteractionEnabled标志,我没有用其他版本测试过这个,但是文档很清楚你应该启用它.在tableViewController中,您只需要保存索引路径,直到获得UIKeyboardDidShow消息
为UITextField创建一个委托,该委托报告回tableViewController,以便您可以从那里设置滚动偏移.
注册键盘事件,然后通过检查编辑模式中的文本字段来确定scrolloffset
您可以将控制器设置为UITextField的委托,然后在textFieldDidBeginEditing:
或中调整表视图textFieldShouldBeginEditing: