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.3
A simple clone of the iOS system keyboard with SwiftUI
⭐️ 6
🕓 4 weeks ago
iOS macOS
.package(url: "https://github.com/thisIsTheFoxe/SimpleKeyboard.git", from: "0.3")


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.


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 enviroment 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 enviroment. To eventually get a UIViewController one has to use a UIHostingController. To manage the transition with all the Bindings, there is the KeyboardSettings: Observable.

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: 6
Last commit: 4 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Related Packages

Release Notes

1 year ago

Mostly bugfixes and update to the newest Swift version

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