当前位置:  开发笔记 > 编程语言 > 正文

单击UITableViewCell中的UITextField

如何解决《单击UITableViewCell中的UITextField》经验,为你挑选了3个好方法。

我有一个问题,当在a textField中单击a时UITableViewCell,该方法tableView:didSelectRowAtIndexPath:不会被调用.问题是,我需要将我滚动tableView到正确的位置,否则键盘会在第一个响应者上方.

我必须像这样移动代码:

[[self tableView] scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

进入我的tableView委托方法和我的UITextField委托方法,textFieldDidBeginEditing:.

是创建新方法的最佳方法,将单击的单元格/文本字段的indexPath传递给它,并从tableView委托和UITextField委托调用该方法?更好的办法吗?



1> 小智..:

我发现以下效果很好(假设你在表视图控制器中)

- (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];
}



2> 小智..:

有几种方法可以解决这个问题.会发生的事情是tableViewCell将触摸事件委托给其子视图,这会导致文本字段处理触摸而不是您的单元格.

解决这个问题:

将UITextfield的userinteractionEnabled属性设置为NO,然后当您获得didSelectRowAtIndexPath消息时,重新启用userInteractionEnabled并调用TextField的becomeFirstResponder.在v2.2上你甚至不需要设置userInteractionEnabled标志,我没有用其他版本测试过这个,但是文档很清楚你应该启用它.在tableViewController中,您只需要保存索引路径,直到获得UIKeyboardDidShow消息

为UITextField创建一个委托,该委托报告回tableViewController,以便您可以从那里设置滚动偏移.

注册键盘事件,然后通过检查编辑模式中的文本字段来确定scrolloffset



3> August..:

您可以将控制器设置为UITextField的委托,然后在textFieldDidBeginEditing:或中调整表视图textFieldShouldBeginEditing:

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有