UITextField 忽略带有临时重音的 shouldChangeCharactersIn
UITextField ignoring shouldChangeCharactersIn with temporary accents
我试图在 iOS 应用程序中只允许输入十进制数字字符。我有这个片段,适用于所有情况。
override func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = NSMutableCharacterSet.decimalDigit()
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
这很简单,这是我在 SO 上随处找到的答案。
但是,这就是问题所在:没有字母的重音字符。很难解释这种行为。当我写 ¨
或 `
之类的字符时,我会进入一种状态,我可以跟进 e
之类的字符以得到 è
。这是用户输入重音字符的一种非常标准的方式。
我们最终处于这种状态,其中 ¨
被突出显示,我可以跟进 o
,然后生成 ö
。
但是,重音字符 (¨
) 字符没有触发 shouldChangeCharactersIn range
调用。似乎 iOS 决定忽略该结果并仍然添加字符。
我怎样才能阻止这种行为?据我了解,这只能通过硬件键盘重现,但我们希望我们的用户使用一个。
当用户键入变音符号等组合变音符号时,根本不会调用您的方法。然后用户键入一些其他字符,例如 o,以及您的方法 returns false
。届时,元音变音将被输入字段并显示在 textField.text
中。您需要检测并删除它。
我试图在 iOS 应用程序中只允许输入十进制数字字符。我有这个片段,适用于所有情况。
override func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = NSMutableCharacterSet.decimalDigit()
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
这很简单,这是我在 SO 上随处找到的答案。
但是,这就是问题所在:没有字母的重音字符。很难解释这种行为。当我写 ¨
或 `
之类的字符时,我会进入一种状态,我可以跟进 e
之类的字符以得到 è
。这是用户输入重音字符的一种非常标准的方式。
¨
被突出显示,我可以跟进 o
,然后生成 ö
。
¨
) 字符没有触发 shouldChangeCharactersIn range
调用。似乎 iOS 决定忽略该结果并仍然添加字符。
我怎样才能阻止这种行为?据我了解,这只能通过硬件键盘重现,但我们希望我们的用户使用一个。
当用户键入变音符号等组合变音符号时,根本不会调用您的方法。然后用户键入一些其他字符,例如 o,以及您的方法 returns false
。届时,元音变音将被输入字段并显示在 textField.text
中。您需要检测并删除它。