密码字段的键盘仅在 iOS 12 上从 azerty 切换到 qwerty(有时)
Posted
技术标签:
【中文标题】密码字段的键盘仅在 iOS 12 上从 azerty 切换到 qwerty(有时)【英文标题】:Password field's keyboard switches from azerty to qwerty (sometimes) only on iOS 12 【发布时间】:2019-03-30 22:30:53 【问题描述】:我在Swift 4
中编写了一个ios
应用程序,我是法国人,所以我在法语/法语地区使用手机。
使用 iOS 12 设备,我的登录页面上的密码字段工作得非常好(保存密码的自动登录甚至可以工作,我没有做任何事情来让它工作),但在我的注册页面上,该字段让我的键盘从 AZERTY 切换到 QWERTY。
我的手机设置中只有 AZERTY 键盘,它发生在所有 iOS 12 设备上,而不仅仅是我的...
我在代码中唯一做的事情:(我的 UIView
文件名为 RegisterView.swift)
fieldPwd = UITextField()
fieldPwdConfirm = UITextField()
fieldPwd.isSecureTextEntry = true
fieldPwdConfirm.isSecureTextEntry = true
这个问题有什么解决办法吗?谢谢!
【问题讨论】:
How to show specific language keyboard when user input values in UITextField in iPhone App?的可能重复 不,但还是谢谢。本主题主要针对 iOS 12,因为此问题仅出现在 iOS 12 上,希望我们能找到解决方案,以便对其他人有所帮助 这似乎是一个已知问题; ***.com/questions/52701160/…。我建议你向 Apple 提交一份大报告。 感谢@Paulw11,我搜索了但没有找到!希望苹果能尽快解决这个问题…… 你找到解决这个问题的方法了吗? 【参考方案1】:我已经为我的项目找到了解决方案,也许它可以帮助某人。
我注意到了:
在我的登录页面(使用 1 个安全的UITextField
),键盘是 AZERTY
在我的登录页面(带有 2 个安全 UITextField
),键盘是 QWERTY
在我的帐户页面(带有 2 个安全 UITextField
)中,键盘是 AZERTY
在对登录页面和帐户页面进行了一段时间比较后,我意识到在我的帐户页面中,安全文本字段之前的文本字段是 .numberPad
文本字段。
所以在我的登录 xib 文件中,我已将安全文本字段设置为 .numberPad
,并在 textFieldDidBeginEditing
中将它们设置为 .default
。然后在textFieldDidEndEditing
中再次回到.numberPad
,因为如果没有,键盘会第二次出现在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
@.@
【讨论】:
【参考方案2】:这是因为应用默认区域设置。 从 info.plist 中删除以下设置。
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>fr</string>
...
</dict>
干杯...
【讨论】:
@QuentinRth 这意味着你仍然有这个问题。您是否也尝试过其他解决方案,【参考方案3】:确实,使用 2 个密码内容类型的文本字段(例如,当用户必须确认新密码时)会导致键盘出现问题。如此处所述,键盘设置为 QWERTY,而它应该是 AZERTY(使用我使用的语言),当我从一个文本字段转到另一个文本字段时,键盘会闪烁。
实际上,无需为密码文本字段设置此内容类型,对两个文本字段使用“新密码”内容类型就可以正常工作,并且不会对键盘造成任何问题。
【讨论】:
对我不起作用,即使文本字段类型为“新密码”或“未指定”,我也会得到一个 qwerty 字段。让我的 azerty 键盘回到这个字段的唯一方法是关闭“安全文本输入”功能。 更新:关闭“安全文本输入”和内容类型“新密码/密码”我遇到了同样的问题(并且密码清晰) 好吧,我想问题出在其他地方,因为我在 AZERTY 中使用键盘同时仍启用安全文本输入属性就足够了。从一个文本字段切换到另一个文本字段时没有键盘闪烁。大多数 textFields 属性在 IB 中设置为默认值(除了更正和拼写检查设置为否和大写设置为无)。两个“新密码”文本字段都在同一个 stackView 中。我的设备(iPhone 8、iOS 13.5.1)也在使用法语。【参考方案4】:同样的问题: https://github.com/xlbs-rm/ios-demo
在此处填写错误报告:https://feedbackassistant.apple.com/ 日期 2020-07-31
Apple 尚未作出任何反应 iOS 13.5.1、13.7、12.4.3 上的问题 已连接设备(调试)、模拟器、TestFlight Alpha 版本(适用于 iTunesConnect 用户)、TestFlight Beta 版本(Apple 批准的 TestFlight 版本)上的问题
唯一的解决方案是删除第二个密码字段!
想法 #2 textContentType = .oneTimeCode 此处建议:https://***.com/a/53760545
if #available(iOS 12.0, *)
tfPassword.textContentType = .oneTimeCode
不工作
未删除警告“无法显示应用程序的自动强密码...”
想法 #3 删除 CFBundleDevelopmentRegion
不工作想法#4 entend UITextField,用正确的语言覆盖 textInputMode 返回一个 类似于这里:https://***.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
现在我可以在所有字段之间移动,并且每次都可以使用德语键盘!
【讨论】:
以上是关于密码字段的键盘仅在 iOS 12 上从 azerty 切换到 qwerty(有时)的主要内容,如果未能解决你的问题,请参考以下文章