如何禁用UITextField自动替换功能:保留三个点而非省略号
解决UITextField自动替换符号的问题
要避免UITextField自动将三个点替换为省略号、两个短横替换为长横,有两种精准的处理方式:
1. 直接禁用智能标点与自动替换(简单高效)
iOS的文本输入控件默认开启了智能标点替换功能,直接关闭对应的选项即可:
- 代码实现:
// 禁用智能破折号(阻止两个短横变成长横) textField.smartDashesType = .no // 禁用自动修正(阻止三个点被替换为省略号) textField.autocorrectionType = .no // iOS 15+ 可统一关闭所有智能标点 if #available(iOS 15.0, *) { textField.smartPunctuationType = .no } - 可视化操作(Storyboard/XIB):
选中目标UITextField,在右侧属性面板中:- 将「Auto-Correction」设为「No」
- 将「Smart Dashes」设为「No」
2. 通过代理拦截文本变更(按需自定义)
如果需要保留其他自动修正功能,仅针对特定替换做拦截,可以实现UITextFieldDelegate方法手动处理文本输入:
extension YourViewController: UITextFieldDelegate { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let currentText = textField.text else { return true } let updatedText = (currentText as NSString).replacingCharacters(in: range, with: string) // 强制保留三个连续点 if updatedText.hasSuffix("...") { textField.text = updatedText return false } // 强制保留两个连续短横 if updatedText.hasSuffix("--") { textField.text = updatedText return false } return true } }
注意:需将UITextField的delegate属性绑定到当前ViewController。
内容的提问来源于stack exchange,提问作者user3555920
相关产品推荐
相关产品推荐

