SimpleKeyboard
SimpleKeyboard解决了iOS平台上常见的问题:当键盘显示时,下面的输入字段可能不再可见。由于没有简单或内置的通用解决方案,SimpleKeyboard试图提供这正正是用户所需的功能。
SimpleKeyboard之所以简单,在于它可以在每个View Controller中工作,而不需要UIScrollView,AutoLayout,底部约束或其他任何其他解决方案中存在的其他东西。
示例
要运行示例项目,首先从仓库克隆,然后从Example目录运行pod install
使用UIScrollView
有底部约束的登录屏幕
包含UITextField的cell的TableView
用法
SimpleKeyboard的设计旨在提供灵活性,这就是为什么有三种方式可以使用它的原因
- 自动:从您的ViewController中删除所有代理/键盘代码。您只需指定或配置IBOutlets即可。
- 手动:您对所有UITextField/UITextView在ViewController中的控制权。键盘仍然表现良好,但您需要通知SimpleKeyboard当前输入控件。
- 组合:SimpleKeyboard将为您管理一些输入控件,而其余的则留给您处理。
创建
首先,在视图控制器中导入 SimpleKeyboard,并声明一个新变量
var simpleKeyboard: SimpleKeyboard!
现在在 onViewDidLoad 下创建键盘对象
override func viewDidLoad() {
super.viewDidLoad()
simpleKeyboard = SimpleKeyboard.createKeyboard(forControls: [firstTextField, secondTextField,
firstTextView, thirdTextField],
fromViewController: self)
}
如果特定的控件(在 UITextView 或数字键盘上)需要键盘工具栏,可以使用 add 函数让 SimpleKeyboard 为您管理
simpleKeyboard.add(control: specificTextView, withDoneButtonKeyboard: true)
// Use selector when wanting to process pressing Done button
simpleKeyboard.add(control: lastVisibleTextField, withDoneButtonKeyboard: true,
doneTarget: self, doneSelector: #selector(donePressed(_:)))
如果您只想让 SimpleKeyboard 正确处理键盘的显示和隐藏,而不需要管理其他操作,那么只需实例化而不绑定任何控件即可
simpleKeyboard = SimpleKeyboard(fromViewController: self)
启用/禁用
重写 viewDidAppear 和 viewDidDisappear 以开始和停止使用 SimpleKeyboard
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
simpleKeyboard.enable()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
simpleKeyboard.disable()
}
但是,当按下 Return 键时,我希望键盘消失
对于这个功能,您不需要委托。SimpleKeyboard 通过使用回调来优雅地实现,用于捕捉不同的事件。只需设置回调如下
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
simpleKeyboard.enable()
simpleKeyboard.textFieldShouldReturn = { textField in
textField.resignFirstResponder()
return true
}
}
请注意,这只会为 SimpleKeyboard 管理的控件工作。所有其他控件需在视图控制器中使用委托处理。
嵌套
考虑一下这样的情况:视图控制器管理着不同的视图和一个 UITableView,每个 cell 中也都有不同的输入控件?源文件中包含了不同的 outlets,这些 outlets 应该放在哪里呢?
这很简单
- 创建键盘(带或不带特定控件)并启用它
- 实现用于开始和结束使用键盘的代理函数
- 在这些代理函数内部,通知 SimpleKeyboard 当前接收和失去焦点的视图。
simpleKeyboard.setActive(view: view)
和
simpleKeyboard.clearActiveView()
失去焦点。
关于更多详细信息,请查看示例 App 中的 NoControlsViewController.swift。
注意事项
- 始终在使用键盘后将其禁用。未进行此操作很可能会导致崩溃。
- 不要为SimpleKeyboard正在处理的控件设置委托。根据代码流,这可能会导致SimpleKeyboard的好处失效。如果您需要自己处理特定的UITextField/UITextView,请相应地使用setActive和clearActiveView函数。
要求
- Swift 4.1
- iOS 10.0 +
- XCode 9.4+
安装
CocoaPods
SimpleKeyboard可以通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中
pod 'SimpleKeyboard'
或
pod 'SimpleKeyboard', '~> 1.0.2'
手动
只需将SimpleKeyboard.swift复制到您的项目中即可。
作者
Cristian Sava, [email protected]
许可
SimpleKeyboard可以在MIT许可下使用。有关更多信息,请参阅LICENSE文件。