获取元素的位置

时间:2012-03-06 10:18:01

标签: iphone objective-c ios

当用户开始编辑其中一个单元格中显示的UITextField时,我无法向上滚动tableView。

我的问题是我无法找到一种方法来了解视图中UITextField的位置。如果我尝试使用activeTextField.frame.origin.y,我会在单元格中获取TextField的位置,但不会在tableView内部。

我构建视图的方式如下: 我有一个TableViewController,它使用初始化UITextField的自定义类创建单元格。然后我的TableViewController将UITextField委托设置为自身,因此我可以触发textFieldDidBeginEditing事件。但是如果我尝试NSLog的TextField的y原点,我总是为每个UITextField获得相同的值,这是它在单元格中的位置。

关于如何解决这个问题的任何想法?

5 个答案:

答案 0 :(得分:5)

这些坐标系变化总是令人困惑......

这应该可以帮助您了解表格视图坐标系中的要点:

CGPoint textFieldCenter = textField.center;
CGPoint pointInTableView = [tableView convertPoint:textFieldCenter fromView:textField.superview];

如果您想在不同的视图中使用它,则应将tableView替换为您想要具有坐标的视图。

如果您想获取表格中的单元格,则textField位于:

NSIndexPath* path = [tableView indexPathForRowAtPoint:pointInTableView];
UITableViewCell* cell = [tableView cellForRowAtIndexPath:path];

答案 1 :(得分:2)

要获取文本字段的位置,请使用UIView方法convertRect:toView:

  

convertRect:toView:从接收器转换矩形   坐标系到另一个视图。

     
      
  • (CGRect)convertRect:(CGRect)rect toView:(UIView *)view
  •   

示例:

CGRect textFieldFrame = [self.tableview convertRect:yourTextField.frame toView:self.view];

答案 2 :(得分:1)

答案 3 :(得分:0)

是的,请尝试使用此方法:

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated

当您提示键盘时,将tableView滚动到所选单元格,它应将单元格置于屏幕顶部。

答案 4 :(得分:0)

试试这个

CGPoint locationinView=[cellView convertPoint:location fromView:tableView];

这里location是cellView中textField的点。