如何在iPhone上的表格单元格中获取文本字段位置?

时间:2012-12-18 03:48:51

标签: iphone objective-c cocoa-touch uitableview uitextfield

enter image description here

这是UI ......(我知道它很难看......)橙色是一个视图,蓝色是表格,灰色是表格单元格,最后,红色是一个文本字段表格单元格。我的问题很简单,我只是想知道红色文字字段的位置......似乎表格单元格可能会上下移动,因此,位置可以改变。所以,我不需要动态更新文本字段位置,我只需要在用户点击文本字段时的位置,任何想法?感谢。

5 个答案:

答案 0 :(得分:4)

您可以使用可在UIView或其派生类

上使用的convetrPoint方法
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view

在你的情况下,你需要这样做:

- (void)textFieldDidBeginEditing(UITextField *)textField 
{
     CGPoint textFieldOriginInTableView = [textFiled convertPoint:textField.frame.origin toView:tableView];
     //or if you want it relative to the orangeView, your toView should be the orangeView
}

答案 1 :(得分:1)

我想提一下:

  1. 如果你的textField在tabelViewCell里面,无论单元格上升或下降多少,它的位置总是相同的。这是因为textField是tabelViewCell的子视图而不是视图。

  2. 您可以通过以下几种方式获得:

    • textFieldDidBeginEditing委托方法上(正如您所提到的,触摸时需要它,意味着开始编辑)。

    • 或者您希望通过以下代码:

    //您可以设置文本字段的标记

    UITableViewCell *cell = [yourTableView cellForrowAtIndexPath:yourCellIndexPath];
    UITextField *textField = (UITextField *)[cell.contentView viewWithTag:textFieldTag];
    

    //或者不想设置Tag,只有textfield存在

    for (UIView *v in [cell.contentView subviews]) {
      if ([v isKindOfClass:[UITextField class]]) {
          UITextField *textField = (UITextField *)v;
     }
    }
    

答案 2 :(得分:0)

假设拥有的视图控制器是UITextField的委托,您可以实现textFieldDidBeginEditing:方法并获取文本字段的框架,如下所示:

- (void)textFieldDidBeginEditing(UITextField *)textField 
{
    CGRect rect = textField.frame;
}

答案 3 :(得分:0)

此动画代码设置框架尝试此代码...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.2];
    CGRect youtTextFielfFrame = textField.frame;// get position of textfield from this code
    [textField setFrame:CGRectMake(textField.frame.origin.x - 50, textField.frame.origin.y,textField.frame.size.width,textField.frame.size.height)]; /// set frame which you want here......
    [UIView commitAnimations];
    return YES;
}

答案 4 :(得分:0)

首先在textField

中添加一个唯一标记
yourTextField.tag = 1001;

在您想要textField位置的位置,只需执行

UITextField *myTextField = [cell viewWithTag:1001];

CGRect textFieldRect = myTextField.Frame;

它将为您提供标记的textField的框架,其中包含textField相对于其superView的x,y,width,height参数。