如何在用户输入一致后居中UITextField光标

时间:2014-08-21 21:58:36

标签: ios objective-c uitextfield uitextfielddelegate

我有一个UITextField我希望始终将所有内容(文本,光标)置于中心位置。在iOS 7中这可能吗?我目前对视图的初始化如下所示。

self.textField = [[UITextField alloc] init];
self.textField.delegate = self;
[self.textField setTextAlignment:NSTextAlignmentCenter];
self.textField.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
self.textField setTranslatesAutoresizingMaskIntoConstraints:NO];
self.textField.placeholder = NSLocalizedString(@"Enter some text", @"The placeholder text to use for this input field");

我对此的要求是,当我点击UITextField时,占位符文本应该会消失,并将光标显示在UITextField的中间。

目前,这似乎是间歇性地定位在文本字段的中间或文本字段的左侧,与我单击的位置无关。有人对我如何解决这个问题有任何建议,或者它是iOS中的一个已知问题?

1 个答案:

答案 0 :(得分:3)

如果你在故事板中创建了UITextField,则不应该初始化并在代码中分配它。

您需要使用Textfield代理来完成此任务..

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.textField.delegate = self;
    [self.textField setTextAlignment:NSTextAlignmentCenter];
    self.textField.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
    [self.textField setTranslatesAutoresizingMaskIntoConstraints:NO];
    self.textField.placeholder = @"Enter some text";
}

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    //this removes your placeholder when textField get tapped
    self.textField.placeholder = nil;
    //this sets your cursor to the middle
    self.textField.text = @" ";
}

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    self.textField.placeholder = @"The placeholder text to use for this input field";
}

这肯定可以解决问题..如果有帮助,请接受答案。

<强>更新

当用户按退格键时,如果代码如下,则光标将不会将文本对齐到左侧。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *proposedNewString = [[textField text] stringByReplacingCharactersInRange:range withString:string];
    NSLog(@"propose: %@", proposedNewString);

    if ([proposedNewString isEqualToString:@""])
    {
        textField.text = [@" " stringByAppendingString:textField.text];
    }

    return YES;
}