2011-08-12 143 views
0

在我自定义表格单元格我想告诉喜欢“输入你的名字”,当用户开始编辑我想要的细胞,其文本在那里停留和不可编辑在我的UITextField一些默认的文本,编辑从默认文本结束处开始。我能轻松做到这一点吗?iPhone:的UITextField默认文本问题

我可以通过在左侧放置一个标签和在右侧放置一个文本框来实现这一点,但是接下来我必须计算每次默认文本的多长时间(对于每个字段可以不同)以及自定义创建文本框这lenght到格格不入。

有什么建议?

回答

1

我有标签计算大小。只需设置标签的文本,然后将标签尺寸设置为合适的尺寸,然后将UITextField滑动到标签的边缘。如果标签文字中有空格,它看起来很棒。

事情是这样的:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 550.0, 28.0)]; 
[nameLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:24.0]]; 
[nameLabel setText:@"Name: "]; 
[nameLabel sizeToFit]; 
[self addSubview:nameLabel]; 
[nameLabel release]; 
UITextField *nameTextField = [[UITextField alloc] initWithFrame:CGRectMake(nameLabel.frame.size.width + nameLabel.frame.origin.x, 0.0, 550.0 - nameLabel.frame.size.width, nameLabel.frame.size.height)]; 

编辑回答关于特殊情况的评论:在特殊情况下,如很长的标签,你就必须添加额外的代码。例如,你可以检查sizeToFit调用后的宽度,如果超过一定的宽度,重建与多条线路的标签,更小的字体,等不幸的是,如果你需要考虑特殊情况下,你必须做一些额外编码工作。

+0

TNX这看起来非常有帮助,但如果有时标签文字很长,这些时间我想它调整其字体或截断线,以允许进行文字输入一些空间呢? – Spring

+0

我可以在笔尖设计这个标签,然后在代码中覆盖吗? – Spring

+1

是的,您可以在Interface Builder中设置界面元素,然后使用代码中的setFrame和sizeToFit等方法来调整它们,只要将它们连接到IBOutlets即可。 –

1

由于您使用的是UITextField,因此您可以挂入UITextFieldDelegatedelegate methods以检查处于不同状态的文本字段的文本。例如,当UITextField变为可编辑时,以及每当文本字段中的文本发生更改时。您可能会感兴趣的

两个是:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

使用这些,你可以轻松拥有placeholder财产UITextField包含你喜欢的任何文字来使用,那么当用户开始编辑的字段,有textFieldDidBeginEditing:中填入占位符文本文本字段的文本,然后监视在用textField:shouldChangeCharactersInRange:replacementString:用户输入不让用户删除手动输入已经为他们的占位符文本的每个字符的文本。

+0

为什么不仅你提到的第二种方法在这里是不够的? – Spring

+1

第一个委托方法使您可以用文本字段中的实际文本替换占位符文本(灰色文本)。第二个委托方法将阻止用户使用第一个委托方法手动删除您输入的文本,这是您希望实现的所需结果。 – larsacus