iOS 14.7 手机号自动填充点击后replacementString为空问题咨询
问题产生原因
这是iOS 14~15.0正式版之间的系统级兼容问题,具体逻辑如下:
- 当用户点击键盘顶部的手机号自动填充建议时,iOS 14.7系统对
UITextField的输入回调做了特殊处理,调用shouldChangeCharactersIn代理方法时,传入的replacementString参数会被置空,同时range参数会被置为NSRange(location: 0, length: 0)。 - 如果你在
shouldChangeCharactersIn代理方法中实现了输入内容非空校验、非法字符过滤等逻辑,遇到空的replacementString时大概率会直接返回false,直接打断了系统的自动填充写入流程,导致手机号无法写入文本框。 - 不实现该代理方法时,系统会跳过所有自定义校验逻辑,直接将手机号写入文本框,因此自动填充功能正常。
兼容修复方案
在shouldChangeCharactersIn代理方法的开头新增自动填充场景判断即可:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // 适配iOS14+自动填充手机号场景 if string.isEmpty && range.location == 0 && range.length == 0 { return true } // 原有逻辑保持不变 // ... }
内容的提问来源于stack exchange,提问作者Alisher Iglymov
相关产品推荐
相关产品推荐

