はじめに
こんにちは、nukkyです。
今回はアプリでの文字入力の際に
入力された文字が絵文字かどうかの判定方法に
結構手間取ったので、備忘録がてら紹介しようと思います。
実装
絵文字の判定
まずは判定の処理を紹介します。
簡単に使用できるようStringにextensionしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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で絵文字の排除
では、実際絵文字の判定処理を使用して
UITextFieldで絵文字の入力チェックを行い
絵文字を表示させないようにしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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での絵文字判定処理でした。
もし、絵文字の判定に困っている方がいれば、
お役に立てればうれしいです。