删除Emoji Bug
问题描述:
我跟着这个链接Find out if Character in String is emoji?尝试限制我的文本字段的字符数量,即使使用表情符号。根据这个链接,我必须根据他们的字形来计算表情符号,除了一个小错误之外,一切正在工作,当我的字形计数达到时,它不会让我再删除字符串。删除Emoji Bug
下面的代码使用的UITextField代表
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var canEditString : Bool = false
if textField == self.descTxtField {
// Description Text Field
if textField.text != nil || textField.text != "" {
let currentString = textField.text
if (currentString?.containsEmoji)! {
print("I have an emoji")
let glyphCount = currentString!.glyphCount
print(glyphCount)
canEditString = glyphCount <= descriptionLimit
}else {
print("I have no emoji's")
let currentCharacterCount = textField.text?.characters.count ?? 0
//print(currentCharacterCount)
if (range.length + range.location > currentCharacterCount){
return false
}
let newLength = currentCharacterCount + string.characters.count - range.length
canEditString = newLength <= descriptionLimit
}
}
return canEditString
} else {
// Number Text Field
let currentCharacterCount = textField.text?.characters.count ?? 0
if (range.length + range.location > currentCharacterCount){
return false
}
let newLength = currentCharacterCount + string.characters.count - range.length
return newLength <= numberLimit
}
}
你应该使用'guard'而不是'let'来减少厄运的金字塔 – Alexander
'range.length'和'string.characters.count'不兼容:*第一个计数UTF-16代码单元而后者计数扩展了Unicode字形集群。看看http://stackoverflow.com/questions/25138339/nsrange-to-rangestring-index的各种答案。 –
你可能感兴趣[如何知道两个表情符号是否会显示为一个表情符号?](http://stackoverflow.com/questions/39104152/how-to-know-if-two-emojis-will-be-显示为一个表情符号) –