【问题标题】:iOS textfield cursor position wrongiOS文本字段光标位置错误
【发布时间】:2018-09-16 00:52:27
【问题描述】:

同时切换 iOS textField isSecureTenxtEntry。

我的代码是这样的

textField?.isSecureTextEntry = !textField.isSecureTextEntry

设备是 iPhone 6。

【问题讨论】:

  • 一旦我开始输入光标移动到正确的位置。
  • 您无法使用此行更改安全文本输入吗?
  • 我可以使用代码更改安全文本输入,但光标与最后一个字符有一段距离。

标签: ios iphone swift uitextfield


【解决方案1】:

首先讨论为什么会发生这种情况。

点字符宽度与普通字符不同,因此当您更改isSecureTextEntry 属性的值时,UITextField 不会刷新,这就是出现额外空格的原因。

要解决这个问题,你可以使用下面的代码

txtPassword.isSecureTextEntry = !txtPassword.isSecureTextEntry
let str = txtPassword.text
txtPassword.text = ""
txtPassword.text = str

我在上面的代码中所做的,在更改isSecureTextEntry 的值后将值存储在临时变量中并清空UITextField,然后使用临时变量重新分配相同的UITextField

【讨论】:

    【解决方案2】:

    这个问题是由于secure dot character和简单字符的字符大小不同引起的。点字符的大小更宽,这就是为什么当您禁用安全文本输入时,字符会收缩但光标会停留在同一位置。

    虽然这个问题不应该出现在最新的 Xcode 中,但我在 Xcode 6.3 中遇到了同样的问题。

    说明:

    当您单击按钮切换secureTextEntry 时,再次为您的文本字段设置becomeFirstResponder,它将调用键盘观察器并将光标重置到正确的位置。

        textField?.isSecureTextEntry = !textField.isSecureTextEntry
    
        if textField?.isFirstResponder {
            textField?.becomeFirstResponder()
        }
    

    希望这会对你有所帮助。

    【讨论】:

    • 是的,此解决方案已解决问题
    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多