如何在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;
}
有两件事我想提一下:
- 在
delegate方法上(正如您提到的,当触摸它时,您需要它,这意味着开始编辑)textfielddibeginediting
- 或者,当您需要时,通过以下代码:
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。。希望这能帮助你……:)@泰德王,这是帮你的,伙计??