iOS 6: UITextField textAlignment не меняет положение курсора

Я использую экземпляр UITextField, в котором текст обычно выравнивается по правому краю, но при редактировании переключается на выравнивание по левому краю. Это делается путем вызова setTextAlignment: для события editingDidBegin. После обновления до iOS 6 это ведет себя странно: выравнивание текста правильно изменено справа налево, но курсор остается в крайнем правом текстовом поле, пока не будет выполнен какой-либо ввод.

Кто-нибудь знает, как восстановить ожидаемое поведение, чтобы курсор также перемещался при изменении выравнивания?

Чтобы дать некоторый контекст: я использую текстовое поле, чтобы показать значение с единицей измерения. Единица удаляется во время редактирования, а затем снова отображается после того, как пользователь нажмет Enter.

Метод, вызываемый при редактировании событияDidBegin:

- (IBAction)textEditingDidBegin:(UITextField *)sender
{
    [sender setTextAlignment:NSTextAlignmentLeft];
    [sender setText:[NSString stringWithFormat:@"%.0f", width]];
}

Метод, вызываемый при редактировании событияDidEnd:

- (IBAction)textEditingDidEnd:(id)sender
{
    [sender setTextAlignment:UITextAlignmentRight];
    [sender setText:[NSString stringWithFormat:@"%.0f m", width]];
}

person Klaus Boldt    schedule 17.12.2012    source источник


Ответы (2)


-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    textField.textAlignment = NSTextAlignmentLeft ;
    return YES ;
}

Измените textAlignment перед началом редактирования did. Я знаю, что лучше всего это можно сделать в методе UITextFieldDelegate textFieldShouldBeginEditing.

person John Sauer    schedule 17.12.2012
comment
Спасибо, это очень помогло! - person Klaus Boldt; 18.12.2012

Попробуйте отказаться от textView в качестве первого ответчика, а затем сразу после этого сделайте его первым ответчиком.

textView.textAlignment = NSTextAlignmentCenter;
[textView resignFirstResponder];
[textView becomeFirstResponder];
person Peter Robert    schedule 27.03.2014