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

时间:2013-12-07 14:37:41

标签: ios iphone objective-c uitableview uitextfield

我使用以下代码在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;


....
....

}

现在,请看下图:

iPhone-screenshot

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

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

1 个答案:

答案 0 :(得分:3)

更改行:

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

要:

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

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

顺便说一句,如果表单不是动态的,请考虑在storyboard中创建静态单元格,而不是动态填充表格。通常,如果在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)

如果您将textfield的标签作为方法中的参数传递:

- (UITextField *)textFieldWithDefaultsForCell:(int)cellIdentifier

以上代码应该有效。

编辑2

如果您担心右侧显示的文字,请设置其对齐方式:

textField.textAlignment = NSTextAlignmentRight;