UITextField(UITextView) 在做输入字符串长度限制时
有两种长度需求限制:
- String.count :中文、英文、表情emoji都长度都算一个
- (String as NSString).length: 中文、英文长度算1,表情emoji长度为2、4、7等等
如果为1的情况,一般没有问题
主要为2的情况下,
// text:Optional("123456789")
let newText = (text as NSString).substring(to: 10)
这个newText会截取到半个表情emoji,会显示
text:Optional("123456789�")
后边这个“�”是我们不需要的错误的半个表情emoji
如何剔除:
newText = (text as NSString).substring(to: maxLength)
/// 有可能会截取到半个表情,所以这里剔除掉半个表情的情况
if let data = newText.data(using: .utf8), let temp = NSString.init(data: data, encoding: String.Encoding.utf8.rawValue), temp.contains("\u{0000fffd}") {
newText = temp.replacingOccurrences(of: "\u{0000fffd}", with: "") as String
}
emoji截取半个之后,转换成utf-8,再解码, 成为”\U0000fffd“, 此时替换移除