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截取半個之后结闸,轉(zhuǎn)換成utf-8唇兑,再解碼, 成為”\U0000fffd“, 此時替換移除