Typist

Swift Version Platform CocoaPods Compatible Carthage compatible Accio supported Twitter

Typist 是一个小型、可直接嵌入的 Swift UIKit 键盘管理器,适用于 iOS 应用程序。它可以帮助您管理键盘在屏幕上的显示和行为,而无需使用通知中心和 Objective-C。


用法

声明在什么事件发生时应该执行什么操作,然后 start() 开始监听键盘事件。就这么简单。

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()

}

必须调用 start() 才能触发回调。在实例上调用 stop() 将停止触发回调,但回调本身不会被移除,因此您可以通过再次调用 start() 来恢复事件回调。

要移除所有事件回调,请调用 clear()

交互性和 inputAccessoryView

当将 Typist 与 UIScrollView 实例一起使用时,您可以交互式地关闭键盘。

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: {...}) 将会随着 UIScrollView 滚动导致的键盘 frame 变化而频繁更新。最佳实践是同时实现 .willHide 部分,因为键盘可能会以非交互方式关闭,例如,使用 resignFirstResponder()

上面的示例在演示应用程序中实现

关于单例用法

shared 单例的用法被认为是方便访问实例的 OK 方式。但是,强烈建议为每个用法(很可能在 UIViewController 中)实例化专用的 Typist()。当屏幕上同时呈现两个或更多使用 Typist.shared 的对象时,请勿使用单例,因为这会导致其中一个控制器无法接收键盘事件。

事件回调选项

每个事件回调都有一个 Typist.KeyboardOptions 类型的参数。它是一个惰性的/不可变的结构体,携带键盘在事件发生时的所有数据

事件

支持以下键盘事件

如果您在同一事件上声明两个闭包,则只会执行后一个闭包。


安装

CocoaPods

您可以使用 CocoaPods 安装 Typist,方法是将其添加到您的 Podfile

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

在您计划监听键盘事件的任何位置导入 Typist。通常在您的 UIViewController 子类中。

import UIKit
import Typist

Carthage

创建一个列出框架的 Cartfile 并运行 carthage update。按照说明$(SRCROOT)/Carthage/Build/iOS/Typist.framework 添加到 iOS 项目。

github "totocaster/Typist"

Accio

使用 init 命令使用 Accio 初始化您的项目。

将以下内容添加到您的 Package.swift

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

接下来,将 Typist 添加到您的 App targets dependencies,如下所示

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

然后运行 accio update

手动

下载并将 Typist.swift 拖放到您的项目中。


感谢 Jake Marsh 在 Little Bites of Cocoa #282: Taming the Keyboard with Typist ⌨️ 中推荐了 Typist。这让我很高兴。


许可证

Typist 在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE