Typist
Typist是一个小巧的iOS应用程序UI键盘管理器,用Swift编写。它帮助您管理键盘屏幕的存在和行为,无需通知中心和使用Objective-C。
用法
声明在特定事件发生时应发生什么,并开始监听键盘事件。就是这样。
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滚动而变化的。实施.willHide
部分也是一个好习惯,因为键盘可能以非交互方式关闭,例如,使用resignFirstResponder()
。
上面的示例已在演示应用程序中实现。
单例使用
shared
单例用于方便地访问实例,通常认为这种方式是可行的。然而,强烈建议为每个使用场景(在大多数情况下是 UIViewController
)实例化专门的 Typist()
。**当有两个或更多使用 Typist.shared
的对象同时在屏幕上时,不要使用单例**,因为这会导致某个控制器无法接收到键盘事件。
事件回调选项
每个事件回调都有一个 Typist.KeyboardOptions
类型的参数。它是一个不可变的 struct,承载了键盘在事件发生时的所有数据
belongsToCurrentApp
— 一个表示键盘是否属于当前应用的Bool
类型。在 iPad 的多任务处理中,当键盘出现和消失时,所有可见的应用都会收到通知。对于导致键盘出现的应用,值为true
,对于任何其他应用,值为false
。startFrame
— 一个标识键盘在屏幕坐标中的起始框架的CGRect
。这些坐标未考虑由于界面方向变化而应用于视图内容的任何旋转因素。因此,在使用之前可能需要将矩形转换为视图坐标(使用convert(CGRect, from: UIView?)
方法)。endFrame
— 一个标识键盘在屏幕坐标中的结束框架的CGRect
。这些坐标未考虑由于界面方向变化而应用于视图内容的任何旋转因素。因此,在使用之前可能需要将矩形转换为视图坐标(使用convert(CGRect, from: UIView?)
方法)。animationCurve
— 定义键盘将如何动画呈现到或从屏幕消失的UIView.AnimationCurve
常量。animationDuration
— 表示动画持续时间的Double
。animationOptions
— 将animationCurve
映射到相应的UIView.AnimationOptions
值的辅助属性。在执行视图动画时(使用UIView.animate(...
)时很有用。
事件
以下是支持的键盘事件
willShow
didShow
willHide
didHide
willChangeFrame
didChangeFrame
– 例如,当键盘因为滚动视图交互而动态消失时。
如果在同一个事件上声明了两个闭包,只有后一个将被执行。
安装
CocoaPods
您可以使用CocoaPods通过将其添加到您的Podfile
中来安装Typist
。
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"
手动
下载并将Typist.swift
拖放到您的项目中。
感谢Jake Marsh在《Little Bites of Cocoa》特色介绍Typist,我的生活真是太美好了 [#282: Taming the Keyboard with Typist
许可
Typist是在MIT许可下发布的。有关详细信息,请参阅LICENSE
文件。