Невозможно переместить курсор в UITextField - PullRequest
1 голос
/ 16 октября 2019

У меня довольно стандартный пользовательский интерфейс с текстовым полем, встроенным в несколько подпредставлений. Я вижу проблему, когда я не могу переместить курсор после того, как я набрал текстовое поле, он постоянно просто возвращается к началу ввода.

Ни в одной точке кода нетлюбые методы, вызываемые для изменения позиции редактирования, например setSelectedTextRange или аналогичные.

Пожалуйста, извините, Objective-C, это устаревшая кодовая база!

self.textField = [UITextField new];
self.textField.text = element.value;
self.textField.placeholder = element.placeholder;
self.textField.returnKeyType = UIReturnKeyNext;
self.textField.delegate = self;
self.textField.autocorrectionType = element.autocorrectionType;
self.textField.autocapitalizationType = element.autocapitalizationType;
self.textField.secureTextEntry = element.secureTextEntry;
self.textField.keyboardType = element.keyboardType;
[self.textField addTarget:self action:@selector(handleTextChange:) forControlEvents:UIControlEventEditingChanged];
[self addSubview:self.textField];
- (void)handleTextChange:(UITextField *)sender
{
    self.inputElement.value = sender.text;

    // If we're showing the validation warning, give real time feedback to user
    if (self.isShowingValidationWarning) {
        [self validate];
    }
}

- (void)validate
{
    BOOL isValid = self.inputElement.isValid;

    [self showValidationHint:!isValid animated:YES];
}

- (void)showValidationHint:(BOOL)show animated:(BOOL)animated
{
    self.isShowingValidationWarning = show;

    CGFloat duration = 0.0;

    if (animated) {
        duration = 0.2;
    }

    [UIView animateWithDuration:duration animations:^{

        if (show) {

            self.characterCountLabel.alpha = 0.0;
            self.validationButton.alpha = 1.0;
            self.validationButton.transform = CGAffineTransformMakeScale(1.0, 1.0);
        } else {

            self.characterCountLabel.alpha = 1.0;
            self.validationButton.alpha = 0.0;
            self.validationButton.transform = CGAffineTransformMakeScale(0.1, 0.1);
        }
    }];
}

inputElement.valueне имеет сеттера или функции получателя, так что ничего страшного там не происходит!

1 Ответ

0 голосов
/ 07 ноября 2019

Ответ был именно таким, на который @juanreyesv указал в комментариях! becomeFirstResponder вызов был перемещен в viewDidAppear вместо viewWillAppear, и теперь он работает!

...