UITextfield 的文本在填充后不会向左移动 - 因为我一直在输入

Posted

技术标签:

【中文标题】UITextfield 的文本在填充后不会向左移动 - 因为我一直在输入【英文标题】:UITextfield's text doesn't move to left after it's filled - as I keep typing 【发布时间】:2013-12-07 14:37:40 【问题描述】:

我在 Tableview 的单元格中使用了 UITextfield,代码如下:

- (UITextField *)textFieldWithDefaultsForCell:(int)cellIdentifier 
UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(180, 12, 135, 20)] autorelease];
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
textField.delegate = self;
textField.textColor = [UIColor colorWithRed:66.0/225.0 green:77.0/255.0 blue:103.0/255.0 alpha:1.0];
textField.returnKeyType = UIReturnKeyDone;
textField.tag = cellIdentifier;
textField.placeholder = @"Enter text";

textField.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom;

textField.clearButtonMode = UITextFieldViewModeWhileEditing;

return textField;

然后,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
....
....
  switch (indexPath.row) 
    case EmailAddressCellIdentifier:
        cell.textLabel.text = @"Email Address";
        textField.keyboardType = UIKeyboardTypeEmailAddress;
        textField.text = configurator.emailAddress;
        [emailAddressField release];
        emailAddressField = [textField retain];

        [cell.contentView addSubview:textField];
        break;


....
....


现在,请看下图:

在邮箱中,我输入的是 abcdef-123456789... 但观点卡住了。它没有向右移动,我看不到其余的文字(6789 ...)。我只能看到 abcdef-12345

你能告诉我,错误在哪里吗?

【问题讨论】:

如果您继续输入更多文本会怎样?它最终会开始向左滚动吗?文本字段的右端很可能不在单元格的右端。调整宽度和/或 x 原点。此外,您的代码将在重复使用单元格时一遍又一遍地添加文本字段。不要那样做。 +1 @rmaddy 我听过的最简洁的建议:“不要那样做。” 【参考方案1】:

换行:

UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(180, 12, 135, 20)] autorelease];

收件人:

UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(135, 12, 180, 20)] autorelease];

您的文本字段的框架宽度(CGRectMake() 中的第三个参数)太小而无法容纳文本。

顺便说一句,如果表单不是动态的,请考虑在情节提要中创建静态单元格,而不是动态填充表格。通常,如果您的 cellForRowAtIndexPath: 方法中有一个大的 switch 语句,则静态表正在调用您的名字。

编辑 1

您还可以通过以下方式创建文本字段的框架,将其 x 设置为与随附标签的一定距离:

CGRectMake(label.bounds.size.width + paddingBetweenTextFieldAndLabel, 12, 135, 20)

我们甚至可以通过根据单元格尺寸设置文本字段的高度和宽度来扩展这个概念:

CGFloat textFieldX = label.bounds.size.width + paddingBetweenTextFieldAndLabel;
CGRectMake(textFieldX,
           label.frame.origin.y,
           cell.bounds.size.width - (textFieldX),
           cell.bounds.size.height)

如果您在方法中将文本字段的标签作为参数传递:

- (UITextField *)textFieldWithDefaultsForCell:(int)cellIdentifier

上面的代码应该可以工作。

编辑 2

如果您担心文本显示在右侧,请设置对齐方式:

textField.textAlignment = NSTextAlignmentRight;

【讨论】:

非常感谢您的回答。以下代码对我有用(编辑 2): textField.textAlignment = NSTextAlignmentRight;

以上是关于UITextfield 的文本在填充后不会向左移动 - 因为我一直在输入的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 在编辑时剪切文本

快速添加填充到 UITextField 的左边距

从联系人中选择自动填充地址后,iOS UITextField 文本字段为空

使用 CSS3 悬停效果,如何将文本向左移动 5 个像素并向后移动?

如何在 iOS 中为 UITextField 提供填充?

UITextField在开始编辑时具有“清除”按钮大小