开发者社区 问答 正文

无法在“‘”符号后键入任何内容

我希望能够在我的文本框中写出拉丁文大写字母和一些符号。这是我的代码

let apostropheCharacterSet = CharacterSet(charactersIn: "'")
let characterSet = CharacterSet(charactersIn: "-/")
         .union(.latinUppercaseLetters)
         .union(apostropheCharacterSet)
         .union(.whitespaces)
 textValidator = CharacterSetTextValidator(set: characterSet)

但是当我输入“‘”时,我不能在它之后输入任何东西(无论是模拟器还是真实设备)。它只发生在这个符号(我已经和其他符号核对过了)。“:”、“^”等)我想看到的结果是:我可以在“‘”符号之后继续打字。拿“MC‘Donald”为例

展开
收起
游客5akardh5cojhg 2019-12-11 21:43:54 360 分享 版权
阿里云 AI 助理回答

你的代码片段展示了你正在使用Swift语言来创建一个自定义的字符验证器,用于限制文本框(UITextField或UITextView)中允许输入的字符类型。你希望允许拉丁文大写字母、破折号、正斜杠、单引号、空白字符以及其他一些符号,并且能够连续输入这些字符,但在实际操作中发现,在输入单引号(')之后无法继续输入其他字符。

这个问题可能是由于iOS的文本输入处理机制导致的。当用户在单引号后直接尝试输入时,系统可能将其解释为关闭了一个引用,尤其是如果自动智能引号功能开启的话,它可能会自动添加一个闭合的单引号并阻止进一步的输入直到用户完成这个“引号对”。

要解决这个问题,你可以尝试以下方法:

  1. 禁用自动智能引号:在你的应用中,可以通过设置UITextField或UITextView的属性来禁用自动更正和智能引号功能。这通常可以在Interface Builder中直接设置,或者通过代码实现:
yourTextField.autocorrectionType = .no
yourTextField.smartQuotesType = .no
  1. 调整CharacterSet:尽管你的characterSet已经包含了单引号,但为了确保它不影响后续输入,可以尝试明确地允许所有标点符号或特定的额外字符集,以避免任何意外的输入限制。

  2. 自定义InputDelegate:如果你需要更细粒度的控制,可以考虑实现UITextFieldDelegate或UITextViewDelegate中的相关方法,比如shouldChangeCharactersIn,在这里你可以根据自己的逻辑决定何时允许输入哪些字符。

  3. 检查键盘类型:确认你的键盘类型是否适合输入这类特殊字符,有时候不同的键盘布局会影响输入行为。

综上所述,首先尝试禁用自动更正和智能引号功能应该能直接解决你的问题。如果问题依旧,再逐步尝试其他方案。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: