3

在此处输入图像描述

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

4

5 回答 5

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
}
于 2012-12-18T04:46:03.877 回答
1

我想提两件事:

  1. 如果您的 textField 在 tabelViewCell 内,则无论单元格向上或向下多少,它的位置始终相同。这是因为 textField 是 tabelViewCell 的子视图,而不是视图。

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

    • textFieldDidBeginEditing委托方法上(正如您提到的,您需要在触摸它时表示开始编辑)。

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

    //你可以设置文本字段的标签

    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;
     }
    }
    
于 2012-12-18T05:18:16.983 回答
0

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

- (void)textFieldDidBeginEditing(UITextField *)textField 
{
    CGRect rect = textField.frame;
}
于 2012-12-18T03:54:36.433 回答
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;
}
于 2012-12-18T05:17:11.547 回答
0

首先给 textField 添加一个唯一的标签

yourTextField.tag = 1001;

比在您想要文本字段位置的位置,只需执行

UITextField *myTextField = [cell viewWithTag:1001];

CGRect textFieldRect = myTextField.Frame;

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

于 2012-12-18T05:24:11.217 回答