首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在UITableViewCell中单击UITextField

在UITableViewCell中单击UITextField
EN

Stack Overflow用户
提问于 2008-12-08 20:57:32
回答 7查看 27.9K关注 0票数 19

我有一个问题,当在UITableViewCell中单击textField时,tableView:didSelectRowAtIndexPath:方法不会被调用。问题是,我需要把我的tableView滚动到合适的位置,否则键盘就会直接滑过第一个响应器。

然后我必须像这样移动代码:

代码语言:javascript
复制
[[self tableView] scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

到我的tableView委托方法和UITextField委托方法textFieldDidBeginEditing:中。

最好的方法是创建一个新方法,将单元格/文本字段的indexPath传递给它,然后同时从tableView委托和UITextField委托调用该方法吗?更好的方式?

EN

回答 7

Stack Overflow用户

发布于 2011-09-30 09:53:26

我发现下面的代码运行得很好(它假设您在一个表视图控制器中)

代码语言:javascript
复制
- (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];
}
票数 22
EN

Stack Overflow用户

发布于 2008-12-08 21:15:42

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

票数 6
EN

Stack Overflow用户

发布于 2011-05-07 22:18:55

我发现做这件事其实很容易。

UITextField委托方法textFieldDidBeginEditing将为您提供文本字段,然后您可以使用以下命令将其映射到indexPath:

代码语言:javascript
复制
self.currentIndexPath = [self.tableView indexPathForRowAtPoint:textField.frame.origin];

然后,您可以将单元格滚动到视图中(即在UIKeyboardDidShowNotification键盘通知处理程序中):

代码语言:javascript
复制
[self.tableView scrollToRowAtIndexPath:self.currentIndexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/350868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档