当前代码:
- (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;
}
答案 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);