这是用户界面...(我知道它很丑...)橙色是视图,蓝色是表格,灰色的是表格单元格,最后,红色是表格单元格中的文本字段. 我的问题很简单,我只想知道红色文本字段的位置......似乎表格单元格可以上下移动,所以位置可以改变。所以,我不需要动态更新文本字段位置,我只需要用户单击文本字段时的位置,有什么想法吗?谢谢。
问问题
2647 次
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
我想提两件事:
如果您的 textField 在 tabelViewCell 内,则无论单元格向上或向下多少,它的位置始终相同。这是因为 textField 是 tabelViewCell 的子视图,而不是视图。
您可以通过以下几种方式获得:
在
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 回答