密码字段的键盘仅在iOS 12上从azerty切换到qwerty(有时)

时间:2018-10-26 07:57:03

标签: ios swift keyboard textfield

我用iOS编写了一个Swift 4应用,我是法语,所以我使用法语/法语区域的手机。

在iOS 12设备上,我的登录页面上的密码字段运行得非常好(使用保存的密码自动登录甚至可以正常工作,而我并没有采取任何措施使此工作正常进行),但是在我的注册页面上,该字段使我的键盘从AZERTY切换到QWERTY。

我的手机设置中只有AZERTY键盘,并且它在所有iOS 12设备上都会发生,而不仅仅是我的...

我在代码中所做的唯一一件事:(我的UIView文件名为RegisterView.swift)

fieldPwd = UITextField()
fieldPwdConfirm = UITextField()
fieldPwd.isSecureTextEntry = true
fieldPwdConfirm.isSecureTextEntry = true

此问题是否有解决方法?谢谢!

4 个答案:

答案 0 :(得分:1)

我为我的项目找到了解决方案,也许可以帮助某人。

我注意到了:

  • 在我的登录页面(带有1个安全的UITextField)中,键盘为AZERTY
  • 在我的登录页面(带有2个安全的UITextField)中,键盘为QWERTY
  • 在我的帐户页面(带有2个安全的UITextField)中,键盘是AZERTY

在登录页面和帐户页面之间进行了一段时间的比较之后,我意识到在我的帐户页面中,安全文本字段之前的文本字段是.numberPad文本字段。

因此,在我的登录xib文件中,我已将安全文本字段设置为.numberPad,并在.default中将其设置为textFieldDidBeginEditing。然后在.numberPad中再次返回textFieldDidEndEditing,因为如果没有,键盘将第二次出现在QWERTY中。现在,我的安全文本字段位于AZERTY。

func textFieldDidBeginEditing(_ textField: UITextField) {
    if ( textField == pwdTextField || textField == pwd2TextField ) {
        textField.keyboardType = .default;
    }
    // do other stuffs
}

func textFieldDidEndEditing(_ textField: UITextField) {
    if ( textField == pwdTextField || textField == pwd2TextField ) {
        textField.keyboardType = .numberPad;
    }
    // do other stuffs
}

@。@

答案 1 :(得分:1)

这是因为应用默认区域设置。 从info.plist中删除以下设置。

<dict>
   <key>CFBundleDevelopmentRegion</key>
   <string>fr</string>
   ...
</dict>

干杯...

答案 2 :(得分:0)

实际上,使用2个密码内容类型文本字段(例如,当用户必须确认新密码时)会导致键盘出现问题。如此处所述,键盘设置为QWERTY,而应该设置为AZERTY(使用我使用的语言),当我从一个文本字段转到另一个文本字段时,键盘会闪烁。

实际上,不需要为密码文本字段设置此内容类型,两个文本字段都使用“新密码”内容类型就可以了,并且不会对键盘造成任何问题。

答案 3 :(得分:0)

同一问题在这里: https://github.com/xlbs-rm/ios-demo

在此处填写了错误报告:https://feedbackassistant.apple.com/日期2020-07-31

苹果公司尚未做出任何反应 在iOS 13.5.1、13.7、12.4.3发行 有关连接设备(调试),模拟器,TestFlight Alpha版本(适用于iTunesConnect用户),TestFlight Beta版本(Apple认可的TestFlight版本)的问题

只有解决方案是删除第二个密码字段!

想法#2 textContentType = .oneTimeCode 建议此处:https://stackoverflow.com/a/53760545

if #available(iOS 12.0, *) {
    tfPassword.textContentType = .oneTimeCode
}
  • 不起作用
  • 不删除警告“无法显示应用程序的自动强密码...”

想法#3删除CFBundleDevelopmentRegion

  • 不起作用

想法#4进入UITextField,重写textInputMode以正确的lang返回一个 类似于此处:https://stackoverflow.com/a/52701639

  • 不起作用

解决方案:

if #available(iOS 12.0, *) {
    passInput.textContentType = .newPassword
}

实施:UITextFieldDelegate

public func textFieldDidBeginEditing(_ textField: UITextField) {
    if exchangeResponder == false {
      exchangeResponder = true
      firstnameInput.becomeFirstResponder()
      textField.becomeFirstResponder()
      exchangeResponder = false
    }
}

passInput.delegate = self
pass2Input.delegate = self

现在我可以在所有字段之间移动,并且每次都有德语键盘即可!