Tag: 观察员

键盘观察器(快速)

为什么要观察员? 有时了解键盘何时弹出会很有用,这样我们就可以在视图中进行一些额外的更改或使用额外的代码来调用某些函数。 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(){ //编写代码行以隐藏键盘,并在隐藏键盘之前对要执行的额外行进行编码。 } //显示键盘 […]

iOS开发课程:通知

什么是通知中心? 如何观察键盘的出现? 如何创建自己的通知? 让我们看看如何在iOS中使用通知。 对象在通知中心注册,以使用addObserver(_:selector:name:object:)或addObserver(forName:object:queue:using:)方法接收通知( NSNotification对象)。 当对象将自己添加为观察者时,它指定应接收的通知。 因此,对象可能会多次调用此方法,以便将自己注册为多个不同通知的观察者。 每个正在运行的应用程序都有一个default通知中心,您可以创建新的通知中心来组织特定上下文中的通信。 通知中心只能在单个程序中传递通知; 如果要向其他进程发布通知或从其他进程接收通知,请改用DistributedNotificationCenter 。 阅读有关Apple Developer的更多信息 让我们创建Single View操场并添加第一个观察者。 NotificationCenter addObserver 该代码有什么作用? 将自身(MyViewController)实例设置为观察者 将私有函数appDidBecomeActive定义为观察者配置的选择器 appDidBecomeActive每次您的应用程序变为活动状态时运行 在通知部分阅读更多 好吧,让我们成为键盘观察者。 将Playground代码更改为以下代码。 键盘观察 运行游乐场。 点按到textField 查看控制台输出: 键盘将显示 点按按钮 查看控制台输出: 键盘会隐藏 因此,现在我们有了两个对象的通知对象,其中都包含有关键盘矩形的信息。 我们还能做些什么? 尝试为UIApplication.keyboardDidShowNotification和UIApplication.keyboardDidHideNotification添加观察器功能,并在控制台中查看区别。 通知包含名称,对象和可选字典,并由NotificationCenter或DistributedNotificationCenter实例广播到该NotificationCenter 。 名称是标识通知的标签。 该对象是通知的发布者想要发送给该通知的观察者的任何对象(通常是发布通知的对象)。 词典存储其他相关对象(如果有)。 NSNotification对象是不可变的。 通常,您通常不直接创建自己的通知,而是调用NotificationCenter方法post(name:object:)和post(name:object:userInfo:) 。 重要 基金会框架的Swift覆盖层提供了Notification结构,该结构与NSNotification类桥接。 有关值类型的更多信息,请参阅结合使用Swift和Cocoa和Objective-C(Swift 4.1)中的Cocoa框架。 阅读有关Apple Developer的更多信息 让我们看看如何创建一个新的通知名称并在项目中使用它。 将Playground代码更改为以下代码。 跑操场 点按按钮 查看结果-UITextField现在是“第一响应者”。 […]

通知观察者和回调

迅捷的iOS 在软件开发中,当我们需要从代码的不同部分执行不同的代码时,总是遇到某些情况。 这个概念与异步行为非常相似,在异步行为中,我们希望在上一个事件完成时执行代码。 本文的目的是在Swift iOS中提供Notification Observer和CallBack的概念。 通知中心观察员: 在通知中心观察者中,我们分为两部分,第一部分是通知,第二部分是观察者。 考虑一下观察者坐在您的代码中的某个地方等待听到通知,一旦通知激发观察者发现并执行您想要执行的代码,这是超高级的,可以让您的手被代码弄脏。 我创建了一个演示项目来演示它。 “请订阅”是默认的标签文本,“订阅”是带有默认文本的按钮。 每次按下订阅按钮时,都会触发通知事件,从而导致标签和按钮文本发生更改。 在注册通知之前,让我们扩展通知名称,这在良好实践中很重要: 让我们在viewDidLoad()函数中注册通知观察者: 添加观察者功能: 订阅按钮操作中的火灾通知: 当您按下“订阅”按钮Notification.default.post时,将触发通知,并成功击中Subsribed()函数并执行代码。 就是这样,我们已经使用Notification Center Observer完成了。