Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iPhone上获取TableCell中的文本字段位置?_Iphone_Objective C_Cocoa Touch_Uitableview_Uitextfield - Fatal编程技术网

如何在iPhone上获取TableCell中的文本字段位置?

如何在iPhone上获取TableCell中的文本字段位置?,iphone,objective-c,cocoa-touch,uitableview,uitextfield,Iphone,Objective C,Cocoa Touch,Uitableview,Uitextfield,这是UI…(我知道它很难看…)橙色是视图,蓝色是表格,灰色是表格单元格,最后,红色是表格单元格中的文本字段。我的问题很简单,我只想知道红色文本字段的位置。。。似乎表格单元格可能会上下移动,因此,位置可以更改。所以,我不需要动态更新文本字段的位置,我只需要用户单击文本字段时的位置,有什么想法吗?谢谢。假设拥有的视图控制器是UITextField的委托,您可以实现textfielddibeginediting:方法并获得文本字段的框架,如下所示: - (void)textFieldDidBeginE


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

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

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

您可以使用可在UIView或其派生类上使用的ConvertPoint方法

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

此代码设置带有动画的帧尝试此代码

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

有两件事我想提一下:

  • 如果您的文本字段位于tabelViewCell内,则无论单元格上下移动多少,其位置始终相同。这是因为textField是tabelViewCell的子视图,而不是视图的子视图

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

    • textfielddibeginediting
      delegate方法上(正如您提到的,当触摸它时,您需要它,这意味着开始编辑)

    • 或者,当您需要时,通过以下代码:

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

    UITableViewCell *cell = [yourTableView cellForrowAtIndexPath:yourCellIndexPath];
    UITextField *textField = (UITextField *)[cell.contentView viewWithTag:textFieldTag];
    
    //或者不想设置标签,只有文本字段

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

  • 首先将唯一标记添加到文本字段

    yourTextField.tag = 1001;
    
    而不是在需要文本字段位置的地方,只需执行以下操作

    UITextField *myTextField = [cell viewWithTag:1001];
    
    CGRect textFieldRect = myTextField.Frame;
    

    它将为您提供已标记文本字段的框架,其中包含文本字段相对于其superView的x、y、宽度和高度参数。

    UITextField属于单元格,而不是UIViewController。这是Ted点。。它会一直留在那个地方。。单元格内的框架..@TedWong如果是单元格的子视图,则无需担心文本字段的位置。如果要对textField进行位置调整,请在单元格的layOutSubview方法中进行。为了清楚起见,您想知道红色视图相对于橙色视图的位置,对吗?@Calvinbai yes,u r right.@TedWong在这里尝试这个更新的代码。您可以轻松地用所需的帧更改textfield的位置,也可以获得textfield YoutTextFielFrame变量的位置,如上面我定义的dude。。希望这能帮助你……:)@泰德王,这是帮你的,伙计??