こんにちは、nukkyです。
今回はアプリでの文字入力の際に
入力された文字が絵文字かどうかの判定方法に
結構手間取ったので、備忘録がてら紹介しようと思います。
まずは判定の処理を紹介します。
簡単に使用できるようStringにextensionしました。
fileprivate var appleColorEmojiFont = CTFontCreateWithName("AppleColorEmoji" as CFString, 20, nil) extension String { //絵文字チェック var isAppleColorEmoji: Bool { let chars = Array(self.utf16) if chars.count == 1 && chars[0] <= 57 { // 制御文字やスペース、数字を除外 return false } var glyphs = [CGGlyph](repeating: 0, count: chars.count) return CTFontGetGlyphsForCharacters(appleColorEmojiFont, chars, &glyphs, glyphs.count) } }
では、実際絵文字の判定処理を使用して
UITextFieldで絵文字の入力チェックを行い
絵文字を表示させないようにしてみます。
class EmojiExclusionTextField: UITextField, UITextFieldDelegate { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! delegate = self } func textFieldShouldReturn(_ textField: UITextField) -> Bool { //キーボードを閉じる textField.resignFirstResponder() return true } //文字入力チェック func textDidChange() { textEmojiExclusion() } //TextFieldの文字列から絵文字を除外する final func textEmojiExclusion() { let checkStr: String = self.text! var replaceText = "" var isExclusion = false for ch in checkStr.characters { let str: String = ch.description if str.isAppleColorEmoji { isExclusion = true } else { replaceText += str } } if isExclusion { self.text = replaceText } } }
UITextFieldDelegateのtextDidChangeにて
判定処理を行い、コピペにも対応するようにしてます。
以上、Swiftでの絵文字判定処理でした。
もし、絵文字の判定に困っている方がいれば、
お役に立てればうれしいです。