ProductPromotion
Logo

Swift

made by https://0x3d.site

GitHub - totocaster/Typist: Swift UIKit keyboard manager for iOS apps.
Swift UIKit keyboard manager for iOS apps. Contribute to totocaster/Typist development by creating an account on GitHub.
Visit Site

GitHub - totocaster/Typist: Swift UIKit keyboard manager for iOS apps.

GitHub - totocaster/Typist: Swift UIKit keyboard manager for iOS apps.

Typist

Swift Version Platform CocoaPods Compatible Carthage compatible Accio supported Twitter

Typist is a small, drop-in Swift UIKit keyboard manager for iOS apps. It helps you manage keyboard's screen presence and behavior without notification center and Objective-C.


Usage

Declare what should happen on what event and start() listening to keyboard events. That's it.

let keyboard = Typist.shared // use `Typist()` whenever you can, see note on singleton usage below

func configureKeyboard() {

    keyboard
        .on(event: .didShow) { (options) in
            print("New Keyboard Frame is \(options.endFrame).")
        }
        .on(event: .didHide) { (options) in
            print("It took \(options.animationDuration) seconds to animate keyboard out.")
        }
        .start()

}

You must call start() for callbacks to be triggered. Calling stop() on instance will stop callbacks from triggering, but callbacks themselves won't be dismissed, thus you can resume event callbacks by calling start() again.

To remove all event callbacks, call clear().

Interactivity and inputAccessoryView

You can dismiss keyboard interactively when using Typist with UIScrollView instances.

let keyboard = Typist()

func configureKeyboard() {

    keyboard
        .toolbar(scrollView: tableView) // Enables interactive dismissal
        .on(event: .willChangeFrame) { (options) in
            // You are responsible animating inputAccessoryView
        }
        .on(event: .willHide)  { (options) in
            // Triggered when keyboard is dismissed non-interactively.
        }
        .start()

}

.on(event: .willChangeFrame, do: {...}) will update as frequently as keyboard frame changes due to UIScrollView scrolling. It is good practice to implement .willHide portion as well since keyboard might be dismissed non-interactively, for example, using resignFirstResponder().

Example from above is implemented in demo app.

On Singleton Usage

Usage of shared singleton, considered to be OK for convenient access to instance. However, it is strongly recommended to instantiate dedicated Typist() for each usage (in UIViewController, most likely). Do not use singleton when two or more objects using Typist.shared are presented on screen simultaneously, as it will cause one of the controllers to fail receiving keyboard events.

Event Callback Options

Every event callback has a parameter of Typist.KeyboardOptions type. It is an inert/immutable struct which carries all data that keyboard has at the event of happening:

  • belongsToCurrentAppBool that identifies whether the keyboard belongs to the current app. With multitasking on iPad, all visible apps are notified when the keyboard appears and disappears. The value is true for the app that caused the keyboard to appear and false for any other apps.
  • startFrameCGRect that identifies the start frame of the keyboard in screen coordinates. These coordinates do not take into account any rotation factors applied to the view’s contents as a result of interface orientation changes. Thus, you may need to convert the rectangle to view coordinates (using the convert(CGRect, from: UIView?) method) before using it.
  • endFrameCGRect that identifies the end frame of the keyboard in screen coordinates. These coordinates do not take into account any rotation factors applied to the view’s contents as a result of interface orientation changes. Thus, you may need to convert the rectangle to view coordinates (using the convert(CGRect, from: UIView?) method) before using it.
  • animationCurveUIView.AnimationCurve constant that defines how the keyboard will be animated onto or off the screen.
  • animationDurationDouble that identifies the duration of the animation in seconds.
  • animationOptionsUIView.AnimationOptions helper property that maps the animationCurve to its respective UIView.AnimationOptions value. Usefull when performming view animations using UIView.animate(....

Events

Following keyboard events are supported:

  • willShow
  • didShow
  • willHide
  • didHide
  • willChangeFrame
  • didChangeFrame – e.g. when keyboard is dynamically dismissed from scroll view interaction.

If you declare two closures on same event, only latter will be executed.


Installation

CocoaPods

You can use CocoaPods to install Typist by adding it to your Podfile:

platform :ios, '8.0'
use_frameworks!
pod 'Typist'

Import Typist wherever you plan to listen to keyboard events. Usually in your UIViewController subclasses.

import UIKit
import Typist

Carthage

Create a Cartfile that lists the framework and run carthage update. Follow the instructions to add $(SRCROOT)/Carthage/Build/iOS/Typist.framework to an iOS project.

github "totocaster/Typist"

Accio

Initialize your project with Accio using the init command.

Add the following to your Package.swift:

.package(url: "https://github.com/totocaster/Typist.git", .upToNextMajor(from: "1.4.2")),

Next, add Typist to your App targets dependencies like so:

.target(
    name: "App",
    dependencies: [
        "Typist",
    ]
),

Then run accio update.

Manually

Download and drop Typist.swift in your project.


My thanks to Jake Marsh for featuring Typist on Little Bites of Cocoa #282: Taming the Keyboard with Typist ⌨️. It made my day.


License

Typist is released under the MIT license. See LICENSE for details.

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory