如果我实现方法shouldChangeCharactersInRange
,则范围值和文本大小之间存在某种不一致。
当我的文本字段只有一个共同的字母(例如" a")并按退格键时,要替换的文本是一个空字符串,textField.text!.characters.count
返回1,愤怒的位置为0,长度为1 (这一切都有意义),但是如果文本字段只有一个表情符号(例如""),range.length
返回2而不是1,然后我从{转换范围时发生崩溃{1}}到NSRange
。为什么会这样?
答案 0 :(得分:1)
Swift 3.0 +
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let strtext = textField.text else {
return true }
let completeString = (strtext as NSString).replacingCharacters(in: range, with: string)
let increment = string == "" ? 0 : 1
let finalString = (completeString as NSString).substring(with: NSRange(location: 0, length: range.location + increment))
print(finalString)
return true
}
注意: - 这将为字符串提供范围 startIndex 到光标位置