はじめに
こんにちは、nukkyです。
今回はアプリでの文字入力の際に
入力された文字が絵文字かどうかの判定方法に
結構手間取ったので、備忘録がてら紹介しようと思います。
実装
絵文字の判定
まずは判定の処理を紹介します。
簡単に使用できるようStringにextensionしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 | fileprivate varappleColorEmojiFont=CTFontCreateWithName("AppleColorEmoji"asCFString,20,nil) extensionString{ //絵文字チェック varisAppleColorEmoji: Bool{ letchars=Array(self.utf16) ifchars.count==1&&chars[0]<=57{// 制御文字やスペース、数字を除外 returnfalse } varglyphs=[CGGlyph](repeating:0,count:chars.count) returnCTFontGetGlyphsForCharacters(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 | classEmojiExclusionTextField:UITextField,UITextFieldDelegate{ required init?(coder aDecoder:NSCoder){ super.init(coder:aDecoder)! delegate=self } functextFieldShouldReturn(_textField:UITextField)->Bool{ //キーボードを閉じる textField.resignFirstResponder() returntrue } //文字入力チェック functextDidChange(){ textEmojiExclusion() } //TextFieldの文字列から絵文字を除外する final functextEmojiExclusion(){ letcheckStr:String=self.text! varreplaceText="" varisExclusion=false forch incheckStr.characters{ letstr:String=ch.description ifstr.isAppleColorEmoji{ isExclusion=true }else{ replaceText+=str } } ifisExclusion{ self.text=replaceText } } } |
UITextFieldDelegateのtextDidChangeにて
判定処理を行い、コピペにも対応するようにしてます。
さいごに
以上、Swiftでの絵文字判定処理でした。
もし、絵文字の判定に困っている方がいれば、
お役に立てればうれしいです。