默认情况下,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。