键盘观察器(快速)
为什么要观察员?
有时了解键盘何时弹出会很有用,这样我们就可以在视图中进行一些额外的更改或使用额外的代码来调用某些函数。
UITextFields足以获取状态。
但是观察者到键盘还是一个加点。
管理键盘
尽管许多UIKit对象会根据用户交互自动显示键盘,但是您的应用仍然承担一些配置和管理键盘的职责。 以下各节描述了这些责任。
接收键盘通知
显示或隐藏键盘时,iOS会将以下通知发送给任何已注册的观察者:
UIKeyboardWillShowNotification
-
UIKeyboardDidShowNotification
-
UIKeyboardWillHideNotification
-
UIKeyboardDidHideNotification
每个键盘通知都包含有关键盘在屏幕上的大小和位置的信息。 您可以使用UIKeyboardFrameBeginUserInfoKey
和UIKeyboardFrameEndUserInfoKey
键从每个通知的userInfo
词典中访问此信息。
您应该始终在这些通知中使用该信息,而不是假设键盘是特定大小或特定位置。 键盘的大小不能保证从一种输入方法到另一种输入方法都相同,并且在不同版本的iOS之间也可能会变化。 此外,即使对于单一语言和系统版本,键盘尺寸也可能根据应用程序的方向而有所不同。 例如,图4–3显示了纵向和横向模式下URL键盘的相对大小。 使用键盘通知中的信息可确保您始终具有正确的尺寸和位置信息。
显示键盘
当用户点击一个视图时,系统会自动将该视图指定为第一响应者。 当包含可编辑文本的视图发生这种情况时,该视图将针对该文本启动编辑会话。 在该编辑会话开始时,视图要求系统显示键盘(如果尚未显示)。 如果键盘已经可见,则第一响应程序中的更改会将来自键盘的文本输入重定向到新轻击的视图。
因为当视图成为第一响应者时会自动显示键盘,所以您通常不需要执行任何操作即可显示它。 但是,您可以通过调用可编辑文本视图的becomeFirstResponder
方法来以编程方式显示该键盘。 调用此方法会使目标视图成为第一响应者,并开始编辑过程,就像用户在视图上轻按一样。
如果您的应用程序在一个屏幕上管理多个基于文本的视图,则最好跟踪当前哪个视图是第一响应者,以便您以后可以关闭键盘。
解除键盘
尽管通常会自动显示键盘,但系统不会自动关闭键盘。 相反,您的应用有责任在适当的时间关闭键盘。 通常,您将根据用户操作来执行此操作。 例如,当用户点击键盘上的“返回”或“完成”按钮或点击应用程序界面中的其他按钮时,您可能会关闭键盘。 根据配置键盘的方式,可能需要向用户界面添加一些其他控件,以方便键盘的退出。
要关闭键盘,请调用当前作为第一响应者的基于文本的视图的resignFirstResponder
方法。 当文本视图退出其第一响应者状态时,它将结束其当前的编辑会话,将该事实通知其委托人,并关闭键盘。 换句话说,如果您有一个名为myTextField
的变量,该变量指向当前是第一个响应者的UITextField
对象,那么解除键盘的操作就像执行以下操作一样简单:
让我们开始使用代码…
1:创建一个函数并将观察者添加到键盘。
//将观察者添加到键盘通知中
fileprivate func watchKeyboardNotifications(){
NotificationCenter.default.addObserver(自身,选择器:#selector(keyboardShow),名称:.UIKeyboardWillShow,对象:nil)
NotificationCenter.default.addObserver(自己,选择器:#selector(keyboardHide),名称:.UIKeyboardWillHide,对象:nil)
}
2:隐藏键盘并显示键盘功能。
//隐藏键盘
@objc func keyboardHide(){
//编写代码行以隐藏键盘,并在隐藏键盘之前对要执行的额外行进行编码。
}
//显示键盘
@objc func keyboardShow(){
//在键盘弹出之前对要执行的行进行编码。
}
3:在viewDidLoad()中调用观察者方法。
覆盖func viewDidLoad(){
super.viewDidLoad()
watchKeyboardNotifications()
}
谢谢..:-)