KDKeyboardTracker

License: MIT

默认情况下,iOS 允许您通过 NSNotification 监控键盘变化。但是,一旦您需要将视图固定在键盘顶部并支持交互式关闭,情况就会变得更加复杂。

这个软件包深受这篇文章以及由此产生的 Objective-C 代码库 的启发。


用法

观察标准键盘变化

键盘跟踪器的一个常见用例是在您的视图控制器中监控键盘状态变化。

一个好的方法是在视图控制器的 willMove(toParent:) 方法中进行。

override func willMove(toParent parent: UIViewController?) {
    super.willMove(toParent: parent)
    if parent != nil {
        KeyboardTracker.shared.addObserver(keyboardObserver: self)
    } else {
        KeyboardTracker.shared.removeObserver(keyboardObserver: self)
    }
}

将您的控制器添加到键盘跟踪器的观察者中,将自动开始生成键盘变化的更新。当所有观察者都从跟踪器中移除后,跟踪器将停止观察变化。

func keyboardTrackerDidUpdate(tracker: KeyboardTracker) {
    // observe frame changes 
}
    
func keyboardTrackerDidChangeAppearanceState(tracker: KeyboardTracker) {
    switch tracker.appearanceState {
    case .undefined:
        break
    case .willShow:
        break
    case .willHide:
        break
    case .shown:
        break
    case .hidden:
        break
    }
}

观察交互式关闭

KeyboardTracker 使用 PseudoInputAccessoryViewCoordinator 来跟踪交互式键盘关闭。

要启用跟踪,您必须重写控制器的 loadView() 方法,并将视图设置为自定义视图。

在您的控制器中重写 loadView()

override func loadView() {
    let view = CustomView(frame: UIScreen.main.bounds)
    view.becomeFirstResponder()
    self.view = view
}

自定义 UIView 示例

class CustomView: UIView {
    
    var inputCoordinator: PseudoInputAccessoryViewCoordinator!
    
    override var canBecomeFirstResponder: Bool {
        return true
    }
    
    override var inputAccessoryView: UIView? {
        return inputCoordinator.pseudoInputAccessoryView
    }
    
    override init(frame: CGRect) {
        inputCoordinator = KeyboardTracker.shared.createCoordinator()
        super.init(frame: frame)
        backgroundColor = .white
    }
    
    required init?(coder: NSCoder) {
        preconditionFailure("init(coder:) has not been implemented")
    }
    
}

查看此代码库中的示例应用程序,试用上述功能。


安装

Xcode 使向您的项目添加 Swift Packages 变得容易。

确保已选择您的目标,并导航到应用程序捆绑包的 General 选项卡。

在 "Frameworks, Libraries, and Embedded Content" 部分,单击 "+" 按钮以添加新的依赖项。

选择 "Add Other..." 下拉菜单,然后选择 "Add Package Dependency",输入包 URL:https://github.com/koderinc/KDKeyboardTracker.git

继续完成向导,直到软件包被添加。

从这里开始,只需在需要的地方 import KDKeyboardTracker 即可。

有关向您的项目添加 Swift Package Dependency 的信息,请参阅 Apple 的文档


许可证

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