Profile
Back to NewsBack
GitHub Trending 3 min
Reader Mode
isaced/ISEmojiView: Emoji Keyboard for iOS

isaced/ISEmojiView: Emoji Keyboard for iOS

6 hours ago

!ISEmojiView logo Version</a> License</a> Platform</a> Carthage Compatible</a> SPM supported</a>

English | 中文

An easy to use Emoji keyboard for iOS.

Has been rewritten with swift, the old Objective-C version on branch oc.

Features

  • [x] Written in Swift
  • [x] Custom emojis
  • [x] Multiple skin tone support ( 🏻 🏼 🏽 🏾 🏿 )
  • [x] Categories bottom bar (like iOS system emoji Keyboard)
  • [x] Recently used emoji
  • [x] Dark Mode (#58)
  • [x] SwiftUI support.
  • [x] Latest emoji data (Unicode 17)
  • [x] Grid density adapts to the device, like the system keyboard
  • [x] Slide across the category bar to switch categories

Example

To run the example projects, clone the repo and open Example/ISEmojiViewExample.xcodeproj (UIKit) or SwiftUIExample/SwiftUIExample.xcodeproj (SwiftUI). Both resolve the library through a local Swift Package reference, no extra install step is needed.

Requirements

  • Swift 5
  • iOS 8+ (CocoaPods / Carthage), iOS 12+ (Swift Package Manager)
  • iOS 13+ for the SwiftUI components

Usage

Installation

Swift Package Manager

via Swift Package Manager Install to your project,Add in Package.swift:

.package(name: "ISEmojiView", url: "https://github.com/isaced/ISEmojiView.git", .upToNextMinor(from: "0.3.0")),

In Xcode:

  • File > Swift Packages > Add Package Dependency
  • Add https://github.com/isaced/ISEmojiView.git
  • Select "Up to Next Major" with "0.3.0"

Cocoapods

# Swift
pod 'ISEmojiView'

Objective-C (Deprecated)

pod 'ISEmojiView', '0.0.1'

Carthage

github "isaced/ISEmojiView"

Import

import ISEmojiView

Initialization

let keyboardSettings = KeyboardSettings(bottomType: .categories)
let emojiView = EmojiView(keyboardSettings: keyboardSettings)
emojiView.translatesAutoresizingMaskIntoConstraints = false
emojiView.delegate = self
textView.inputView = emojiView

Delegate

Conform to EmojiViewDelegate

// callback when tap a emoji on keyboard
func emojiViewDidSelectEmoji(_ emoji: String, emojiView: EmojiView) {
    textView.insertText(emoji)
}

// callback when tap change keyboard button on keyboard func emojiViewDidPressChangeKeyboardButton(_ emojiView: EmojiView) { textView.inputView = nil textView.keyboardType = .default textView.reloadInputViews() } // callback when tap delete button on keyboard func emojiViewDidPressDeleteBackwardButton(_ emojiView: EmojiView) { textView.deleteBackward() }

// callback when tap dismiss button on keyboard func emojiViewDidPressDismissKeyboardButton(_ emojiView: EmojiView) { textView.resignFirstResponder() }

Customize

KeyboardSettings

This is a class to describe keyboard settings. Available properties:

  • bottomType - type of bottom view. Available variants: .pageControl, .categories. See BottomType enum. Default .pageControl.
  • customEmojis - array of custom emojis. To describe emojis you have to use EmojiCategory class.
  • isShowPopPreview - long press to pop preview effect like iOS10 system emoji keyboard. Default is true.
  • countOfRecentsEmojis - the max number of recent emojis, if set 0, nothing will be shown. Default is 50.
  • needToShowAbcButton - need to show change keyboard button. This button is located in Categories bottom view.
  • needToShowDeleteButton - need to show delete button in the bottom view. Default is true.
  • updateRecentEmojiImmediately - update the recent emoji list immediately when an emoji is selected. Default is true.

SwiftUI

SwiftUI components are distributed via Swift Package Manager only (the CocoaPods pod ships the UIKit sources). Requires iOS 13+.

Doesn't work on macOS SwiftUI natively.

EmojiTextField (recommended)

Replaces the system keyboard of a text field with the emoji keyboard. The Binding stays the single source of truth: emoji taps, the delete key and grapheme-cluster deletion (skin tones, ZWJ sequences) all keep it in sync.

import ISEmojiView

@State private var text = ""

EmojiTextField( text: $text, placeholder: "Tap to type", bottomType: .categories, needToShowAbcButton: true ) .frame(height: 44)

EmojiView_SwiftUI (inline panel)

Embeds the keyboard directly in a view. EmojiView has no intrinsic content size, so give it an explicit frame.

import ISEmojiView

EmojiView_SwiftUI( bottomType: .categories, didSelect: { emoji in print(emoji) } ) .frame(width: 300, height: 300)

All keyboard settings are applied when the underlying view is created. To change them later, recreate the view, for example with .id(...).

See SwiftUIExample/ for a runnable demo project.

License

MIT

Chat with me