键盘支持

CI Status Version Carthage compatible License Platform codecov codebeat badge

目的

这个库为处理常见的键盘任务提供了便利。主要有以下几个目标

主要概念

用法

KeyboardDismissable

遵循此协议以启用在键盘显示时通过点击屏幕关闭键盘的功能。

class ViewController: UIViewController, KeyboardDismissable {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupKeyboardDismissalView()
    }
}

KeyboardScrollable

遵循此协议以启用在键盘显示时滚动到第一响应者的功能。必须与 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()
    }
}

KeyboardToolbar

创建您自己的输入附件视图,用于在文本输入之间导航。使用便捷方法创建后退/下一步/完成按钮,或提供您自己的 UIBarButtonItem

let keyboardToolbar = KeyboardToolbar()
keyboardToolbar.addButton(type: .back, title: "Back")
keyboardToolbar.addButton(type: .next, title: "Next")
keyboardToolbar.addFlexibleSpace()
keyboardToolbar.addSystemDoneButton()

查看 KeyboardToolbar 以获取其他按钮添加选项。

KeyboardNavigator - 当使用 KeyboardToolbar 时

创建一个 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 - 当使用键盘的“Return”键时

创建一个 KeyboardNavigator,传入您的文本输入并将 returnKeyNavigationEnabled 参数设置为 true。文本字段的顺序决定了从一个文本输入到下一个文本输入的导航顺序。重要的是要注意,KeyboardToolbar 和键盘的“Return”键的使用不是互斥的。 您可以让 KeyboardNavigator 同时使用 KeyboardToolbar 和键盘的“Return”键。

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
    }
}

示例

要运行示例项目,请克隆 repo,并首先从 Example 目录运行 pod install

要求

安装

Swift Package Manager

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 中描述的步骤操作。

作者

Bottle Rocket Studios

许可证

KeyboardSupport 在 Apache 2.0 许可证下可用。有关更多信息,请参阅 LICENSE.txt 文件。

贡献

请参阅 CONTRIBUTING 文档。 谢谢,贡献者