【问题标题】:Can't move cursor in UITextField无法在 UITextField 中移动光标
【发布时间】:2019-10-16 13:56:43
【问题描述】:

我有一个相当标准的 UI,在几个子视图中嵌入了一个文本字段。我看到一个问题,在我输入文本字段后,我无法移动光标,它不断地回到输入的开头。

代码中的任何地方都没有调用任何方法来更改编辑位置,例如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 没有 setter 或 getter 函数,所以没有什么奇怪的东西!

【问题讨论】:

  • 发布handleTextChange()方法代码。
  • 完成了,虽然我已经注释掉了其中的所有代码以确保其中没有任何内容!
  • 我遇到了类似的问题,但我们使用的是 Swift。对我来说,我发现问题在于我们在“错误”事件(viewWillAppear)中调用了becomeFirstResponder,我将其移至viewDidAppear,问题就消失了。如果您正在调用 becomeFirstResponder,我在您发布的代码中看不到,但我不熟悉 objc 并且该函数是否被称为相同
  • @juanreyesv 嘿,感谢您的解决方案!你知道你最初是在哪里找到答案的吗?
  • 嘿@inokey 不用担心,很高兴这有帮助。我自己尝试了一些东西找到了解决方案,直到它被修复

标签: ios uitextfield uikit


【解决方案1】:

这里的答案正是@juanreyesv 在 cmets 中指出的! becomeFirstResponder 呼叫已移至 viewDidAppear 而不是 viewWillAppear,现在它正在工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2012-06-24
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多