KeyboardSupport
目的
此库提供了一些方便处理常见键盘任务的工具。以下是几个主要目标
- 通过屏幕上的点击自动 dismissing 键盘。
- 自动滚动到正在活动的
UITextField
或UITextView
。 - 通过提供您自己的输入 accessory 视图来轻松实现文本输入之间的导航。
- 允许键盘 "Return" 键在
UITextField
之间进行导航。 - 提供了一个
UIToolbar
的子类,从而可以更快地创建自己的输入 accessory 视图。
主要概念
- KeyboardDismissable - 一个协议,当键盘显示时,通过屏幕上的点击来支持自动键盘关闭。
- KeyboardScrollable - 一个协议,当键盘显示时,支持滚动视图到第一个响应者。必须与
UIScrollView
或其子类一起使用。 - KeyboardRespondable - 继承自
KeyboardDismissable
和KeyboardScrollable
以提供便利。 - KeyboardToolbar - 一个
UIToolbar
的子类,具有自定义选项,可以快速创建自己的输入 accessory 视图。 - KeyboardAccessory - 如果您的自定义视图符合此协议,则可以获取“back”,“next”和“done”的回调以在文本输入之间进行移动。
- KeyboardNavigator - 通过提供您的
KeyboardToolbar
或使用键盘的 return 键来处理文本输入之间的导航。
使用方法
键盘消隐
遵循此协议,通过轻触屏幕来启用键盘消隐功能,前提是在键盘显示时。
class ViewController: UIViewController, KeyboardDismissable {
override func viewDidLoad() {
super.viewDidLoad()
setupKeyboardDismissalView()
}
}
键盘可滚动
遵循此协议以在键盘显示时启用对第一个响应者的滚动。必须与 UIScrollView
或其子类一起使用。
class ViewController: UIViewController, KeyboardScrollable {
@IBOutlet private var scrollView: UIScrollView!
var keyboardScrollableScrollView: UIScrollView? {
return scrollView
}
var keyboardWillShowObserver: NSObjectProtocol?
var keyboardWillHideObserver: NSObjectProtocol?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setupKeyboardObservers()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
removeKeyboardObservers()
}
}
键盘工具栏
创建自己的输入辅助视图,用于在文本输入之间导航。使用便利方法创建返回/下一个/完成按钮或提供自己的 UIBarButtonItem
。
let keyboardToolbar = KeyboardToolbar()
keyboardToolbar.addButton(type: .back, title: "Back")
keyboardToolbar.addButton(type: .next, title: "Next")
keyboardToolbar.addFlexibleSpace()
keyboardToolbar.addSystemDoneButton()
查看 KeyboardToolbar
以获取其他按钮添加选项。
KeyboardNavigator - 使用键盘工具栏时
创建一个 KeyboardToolbar
,配置它,添加返回/下一个/完成按钮。然后,创建一个 KeyboardNavigator
,传入你的文本输入和工具栏。文本输入的顺序决定了遍历一个到另一个的导航顺序。可选地,实现 KeyboardNavigatorDelegate
以在轻触 KeyboardToolbar
中的“返回”、“下一个”和“完成”时接收回调。
class ViewController: UIViewController {
@IBOutlet private var textInput1: UITextField!
@IBOutlet private var textInput2: UITextView!
private var keyboardNavigator: KeyboardNavigator?
override func viewDidLoad() {
super.viewDidLoad()
let keyboardToolbar = KeyboardToolbar()
keyboardNavigator = KeyboardNavigator(textInputs: [textInput1, textInput2], keyboardToolbar: keyboardToolbar)
keyboardNavigator?.delegate = self
}
}
extension ViewController: KeyboardNavigatorDelegate {
func keyboardNavigatorDidTapBack(_ navigator: KeyboardNavigator) {
// Your code here
}
func keyboardNavigatorDidTapNext(_ navigator: KeyboardNavigator) {
// Your code here
}
func keyboardNavigatorDidTapDone(_ navigator: KeyboardNavigator) {
// Your code here
}
}
KeyboardNavigator - 使用键盘的“回车”键时
创建一个KeyboardNavigator
,传入您的文本输入并将其returnKeyNavigationEnabled
参数设置为true
。文本字段的顺序决定了从第一个文本输入到下一个文本输入的导航顺序。需要注意的是,KeyboardToolbar
的用法和键盘的“回车”键不是互斥的。您可以同时使用KeyboardNavigator
和键盘的“回车”键。
class ViewController: UIViewController {
@IBOutlet private var textInput1: UITextField!
@IBOutlet private var textInput2: UITextField!
private var keyboardNavigator: KeyboardNavigator?
override func viewDidLoad() {
super.viewDidLoad()
keyboardNavigator = KeyboardNavigator(textInputs: [textInput1, textInput2], returnKeyNavigationEnabled: true)
}
}
KeyboardAutoNavigator - 使用KeyboardToolbar时
创建一个KeyboardToolbar
,根据需要配置后退/前进/完成按钮。然后创建一个KeyboardAutoNavigator
,传入您的工具栏。文本输入的位置决定了从一个文本输入到下一个的导航顺序。可选地实现KeyboardAutoNavigatorDelegate
来接收在KeyboardToolbar
中点击“后退”、“前进”和“完成”时的回调。
class ViewController: UIViewController {
@IBOutlet private var textInput1: UITextField!
@IBOutlet private var textInput2: UITextView!
private var keyboardNavigator: KeyboardAutoNavigator?
override func viewDidLoad() {
super.viewDidLoad()
let keyboardToolbar = KeyboardToolbar(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 44.0))
keyboardNavigator = KeyboardAutoNavigator(navigationContainer: scrollView, defaultToolbar: keyboardToolbar, returnKeyNavigationEnabled: true)
keyboardNavigator?.delegate = self
}
}
extension ViewController: KeyboardAutoNavigatorDelegate {
func keyboardAutoNavigatorDidTapBack(_ navigator: KeyboardAutoNavigator) {
// Your code here
}
func keyboardAutoNavigatorDidTapNext(_ navigator: KeyboardAutoNavigator) {
// Your code here
}
func keyboardAutoNavigatorDidTapDone(_ navigator: KeyboardAutoNavigator) {
// Your code here
}
}
示例
要运行示例项目,首先克隆存储库,然后从Example目录运行pod install
。
需求
- iOS 9.0+
- Swift 5.0
安装
Swift 包管理器
dependencies: [
.package(url: "https://github.com/BottleRocketStudios/iOS-KeyboardSupport.git", from: "2.1.1")
]
CocoaPods
KeyboardSupport 可以通过 CocoaPods 使用。要安装它,只需在 Podfile 中添加以下行:
pod 'KeyboardSupport'
Carthage
将以下内容添加到您的 Cartfile
github "BottleRocketStudios/iOS-KeyboardSupport"
运行 carthage update
并按照 Carthage 的 README 中描述的步骤操作。
作者
许可协议
KeyboardSupport 在 Apache 2.0 许可协议下可用。更多信息请查阅 LICENSE.txt 文件。
贡献
请参阅 CONTRIBUTING 文件。感谢 贡献者!