无法获得UITextField [textField frame];

时间:2011-10-30 15:17:22

标签: objective-c ios

当前代码:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    NSLog(@"begin edit: %@", textField);
}

相关输出:

2011-10-30 09:12:08.436 My Project[83470:207] begin edit: <UITextField: 0x6c349d0; frame = (112 2; 182 39); text = 'My Name'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x6c34af0>>

所以我知道textfield框架在那里,但是当我试图抓住它时:

代码:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    NSLog(@"begin edit: %@", [textField frame]);
    // also tried textField.frame -- same thing
}

错误:

Thread 1: EXC_BAD_ACCES (code=1, address=0x42e00000)

输出:

(lldb)

我一直在旋转我的轮子,我不知道下一步该去哪里。感谢您阅读我的问题。

**编辑 - 单元格xib实例化(文本域所在的位置)**

注意:文本字段来自xib文件,它只是一个表格单元格。

static NSString *CellIdentifier = @"ValidatedTextViewTableCell";

ValidatedTextViewTableCell *cell = (ValidatedTextViewTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"ValidatedTextViewTableCell" owner:self options:nil];
    cell = validatedTextViewTableCell;
    self.validatedTextViewTableCell = nil;
}

1 个答案:

答案 0 :(得分:3)

这不起作用:

NSLog(@"begin edit: %@", [textField frame]);

因为frame是CGRect类型而不是对象,所以%@格式说明符(仅用于对象)在传递时会爆炸。您需要按每个组件记录框架,如下所示:

NSLog(@"begin edit: %f, %f, %fx%f", [textField frame].origin.x [textField frame].origin.y, [textField frame].size.width, [textField frame].size.height);