iPhone:UITextField默认文本问题

时间:2011-08-12 12:47:47

标签: ios ios4

在我的自定义表格单元格中,我想在我的UITextField中显示一些默认文本,例如“输入你的名字”,当用户开始编辑单元格时,我希望文本保留在那里并且不可编辑,并且编辑开始于默认文本结束。我可以轻松地做到这一点吗?

我可以通过在左侧放置一个标签并在右侧放置一个文本字段来实现这一点,但是我必须每次计算默认文本的长度(每个字段可以有所不同)并自定义创建一个文本字段长度适应。

有什么建议吗?

2 个答案:

答案 0 :(得分: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调用后检查宽度,如果超过某个宽度,则使用多行,更小的字体等重建标签。不幸的是,如果您需要考虑特殊情况,那么您将会必须做额外的编码工作。

答案 1 :(得分:1)

由于您使用的是UITextField,因此您可以访问UITextFieldDelegate delegate methods以检查不同状态下文本字段的文本。例如,当UITextField变得可编辑时,以及文本字段中的文本更改时。

您可能感兴趣的两个是:

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

使用这些,您可以轻松地让placeholder属性UITextField包含您要使用的任何文字,然后当用户开始编辑该字段时,请填写textFieldDidBeginEditing:带有占位符文本的文本字段文本,然后使用textField:shouldChangeCharactersInRange:replacementString:监视用户输入的每个字符的文本,以免用户删除您手动为其输入的占位符文本。