shouldChangeCharactersInRange使用表情符号

时间:2016-11-22 14:46:06

标签: swift emoji uitextfielddelegate

如果我实现方法shouldChangeCharactersInRange,则范围值和文本大小之间存在某种不一致。 当我的文本字段只有一个共同的字母(例如" a")并按退格键时,要替换的文本是一个空字符串,textField.text!.characters.count返回1,愤怒的位置为0,长度为1 (这一切都有意义),但是如果文本字段只有一个表情符号(例如""),range.length返回2而不是1,然后我从{转换范围时发生崩溃{1}}到NSRange。为什么会这样?

1 个答案:

答案 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 到光标位置