Swiftpack.co - thisIsTheFoxe/SimpleKeyboard as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by thisIsTheFoxe.
thisIsTheFoxe/SimpleKeyboard 0.4
A simple clone of the iOS system keyboard with SwiftUI
⭐️ 10
🕓 6 weeks ago
iOS macOS
.package(url: "https://github.com/thisIsTheFoxe/SimpleKeyboard.git", from: "0.4")


Swift SwiftLint codecov Maintainability Rating

The idea of this package came from a keyboard extension and the fact that - AFAIK - one can't open another keyboard within a keyboard extension. So the goal was to have a ViewController, that simply displays the keyboard and changes a text variable.

UI Themes

As the goal of this idea was to simply imitate the system keyboard that's a lot where the inspiration came from. However, inspired by a Tweet from @laurentdelrey I decided to also include a floating keyboard with some nice rounded corners.

SimpleStandardKeyboard Screenshots

System (in light) Floating (in dark)
A screenshot of an iPhone 13 Pro Max, with a colorful background and a systemlike dark keyboard A screenshot of an iPhone 13 Pro Max, with a colorful background and a floating light keyboard


This project includes a SimpleKeyboard that takes a custom 2D-list of Strings which will be rendered as the keys. The SimpleStandardKeyboard provides a default implementation for some languages and a few more default settings.


Depending on the needs one can use the keyboards in a larger SwiftUI environment with a Text that will act as the TextField. Or one can choose to only display the keyboard with a the text input coming from a UIKit environment. To eventually get a UIViewController one has to use a UIHostingController. To manage the transition with all the Bindings, one can use the KeyboardSettings.

Use SimpleKeyboard with UIKit

Here is an example implementation from one of my projects:

class MyViewController: UIViewController {
    @IBOutlet var textField: UITextField!
    func presentKeyboard() {
        let keyboardSettings = KeyboardSettings(language: .english, textInput: self.textField)
        let keyboardVC = MyKeyboardMaker(settings: keyboardSettings).makeViewController()
        self.contentController.pushViewController(keyboardVC, animated: true)

struct MyKeyboardMaker {
    @ObservedObject var settings: KeyboardSettings
    func makeViewController() -> UIHostingController<SimpleStandardKeyboard> {
        UIHostingController(rootView: SimpleStandardKeyboard(settings: $settings)

When initializing a new object of that struct, one has to pass the language and textField. Now makeViewController() can be called e.g. pushed onto a NavigationController.


Stars: 10
Last commit: 5 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Related Packages

Release Notes

6 weeks ago

Update for iOS 16

  • Update SiwftUI
  • fix buttons target area is the entire button, not just the text (especially for 'space')
  • #9

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics