[Swift4.2互动教程]八、实用进阶-(7)使用通知的方法进行对象间的消息传递

[Swift4.2互动教程]八、实用进阶-(7)使用通知的方法进行对象间的消息传递,第1张

概述本文将为你演示,如何使用Notification Center进行消息的传递。 通知中心是一个调度消息通知的类,采用单例设计模式,实现数据传递,回调等功能。 首先打开自定义视图的代码文件(CustomView.swift) 1 import UIKit 2 //使当前的自定义类,遵循文本输入框代理协议 3 class CustomView: UIView,UITextFieldDeleg

本文将为你演示,如何使用Notification Center进行消息的传递。
通知中心是一个调度消息通知的类,采用单例设计模式,实现数据传递,回调等功能。
首先打开自定义视图的代码文件(CustomVIEw.swift)

 1 import UIKit 2 //使当前的自定义类,遵循文本输入框代理协议 3 class CustomVIEw: UIVIEw,UITextFIEldDelegate{ 4 //给自定义类添加一个文本框类型的属性 5     var textFIEld: UITextFIEld! 6  7 //重写初始化方法, 8     overrIDe init(frame: CGRect) 9     {10        super.init(frame: frame)11 //接着对文本框属性进行初始化,并设置它的显示区域12        textFIEld = UITextFIEld(frame:CGRect(x: 0,13                                             y: 0,14                                         wIDth: self.frame.size.wIDth,15                                        height: self.frame.size.height))16 //设置文本框字体大小17         textFIEld.Font = UIFont.boldSystemFont(ofSize: 14)18 //设置文本框字体颜色19         textFIEld.textcolor = .purple20 //设置文本框投影颜色21         textFIEld.layershadowcolor = UIcolor.black.cgcolor22 //设置文本框投影偏移距离23         textFIEld.layershadowOffset = CGSize(wIDth: 0.0,height: 3.0)24 //设置文本框的不透明度25         textFIEld.shadowOpacity = 0.4526 //设置阴影的半径大小27          textFIEld.shadowRadius = 328 //设置文本框大背景颜色29          textFIEld.backgroundcolor = .lightGray30 //设置文本框的代理对象31          textFIEld.delegate = self32 33 //将文本框添加到自定义视图之中34          self.addSubvIEw(textFIEld)35       }36 37 //实现文本框代理协议中的方法,用来监听键盘上的回车键被按下的事件38      func textFIEldShouldReturn(_ textFIEld: UITextFIEld) -> Bool39      { 40 //获得通知中心的单例对象,发送一条指定名称的通知,41 //并设置通知中心传递的数据为空。42          NotificationCenter.default.post(name: NSNotification.name(rawValue:"checkFormNotification"),43                                      object: nil,44                                    userInfo: nil)45          return true    46        }47 48 //需要实现指定的初始化方法49     required init?(coder aDecoder: NSCoder)50     {51         fataError("init(coder:) has not been implemented")52      }53 }

然后在左侧的项目导航区,打开视图控制器的代码文件(VIEwController.swift)

 1 import UIKit 2  3 class VIEwController: UIVIEwController{ 4 //添加两个自定义视图类型的属性 5      var nameFIEld: CustomVIEw!  6      var passwordFIEld: CustomVIEw!  7 //添加一个提交按钮,当点击该按钮时,提交整个表单。 8      var submitbutton: UIbutton!     9 10      overrIDe func vIEwDIDLoad(){11          super.vIEwDIDLoad()12 13 //初始化两个整形常量,作为自定义视图的宽度和高度14          let wID = Int(self.vIEw.frame.size.wIDth) - 4015          let hei = 4016 17 //然后对第一个自定义视图属性进行初始化,并设置它的显示区域18          nameFIEld = CustomVIEw(frame: CGRect(x: 20,y: 80,with: wID,height: hei))19 20 //对第二个自定义视图属性进行初始化,并设置它的显示区域21          passwordFIEld= CustomVIEw(frame: CGRect(x: 20,y: 140,height: hei))22 23 //初始化提交按钮属性,并设置它的显示区域24          submitbutton = UIbutton(frame: CGRect(x: 20,y: 240,height: hei))25 //设置按钮在正常状态下的标题文字26          submitbutton.setTitle("Sumbit",for: .normal)27 //给按钮对象绑定点击事件28          submitbutton.addTarget(self,29                               action: #selector(VIEwController.submitForm(_:)),30                                  for: .touchUpInsIDe)31 //设置按钮对象的背景颜色为灰色32          submitbutton.backgroundcolor = .gray33 //并设置按钮对象为不会响应交互事件的状态34 //只有当文本框中的内容都被检验成功时,该按钮的状态才会恢复为正常。35          submitbutton.isEnabled = false36 //将按钮对象添加到当前视图控制器的根视图37          slef.vIEw.addSubvIEw(submitbutton)    38 39 //获得通知中心的单例对象,并通过addobserver,对指定名称的通知进行监听,40 //当收到指定名称的通知时,调用选择器中的checkForm方法。41           NotificationCenter.default.addobserver(self,42                  action: #selector(VIEwController.checkForm(_:)),43                    name: NSNotification.name(rawValue:"ceckFormNotification"),44                  object: nil)    45      }46    47 //当点击按钮时在控制台输出一条日志语句,模拟表单的动作48      @objc func submitForm(_ sender: UIbutton)49      {50           print("summitForm...")51       }52 53 //接着添加一个方法,用来响应自定义视图中的文本框的回车键被按下的事件54      func checkForm(_ notification: Notification?)55      {56 //当键盘中的回车键被按下时,对两个自定义视图中的文本框进行检验57           if self.nameFIEld.textFIEld.text != "" && self.passwordFIEld.textFIEld.text != ""58           {59 //当两个文本框中的内容都不为空时,恢复提交按钮的可交互性,60 //并调整按钮的背景颜色为橙色61                self.submitbutton.isEnabled = true62                submitbutton.backgroundcolor = .orange      63            } 64            else65           {66 //当两个文本框中的内容有一个不为空,或者全部为空时,设置按钮不可进行点击67 //背景颜色改为灰色。68                self.submitbutton.isEnabled = false69                self.submitbutton.backgroundcolor = .gray 70             }     71       }  72 73 //在该类文件中,添加一个析构方法,当该类的实例对象被销毁时,74 //及时移除通知中心,以免造成资源的浪费75      deinit76      {77          NotificationCenter.default.removeObserver(self)78       } 79  80      overrIDe func dIDReciveMemoryWarning(){81           super.dIDReceiveMemoryWarning()82 83      }84 }

此时自定义视图广播了一条指定名称的通知,并由控制器捕捉到了同名的通知。由于两个文本框中的内容不为空,所以按钮对象的背景颜色变成了橙色。

总结

以上是内存溢出为你收集整理的[Swift4.2互动教程]八、实用进阶-(7)使用通知的方法进行对象间的消息传递全部内容,希望文章能够帮你解决[Swift4.2互动教程]八、实用进阶-(7)使用通知的方法进行对象间的消息传递所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1023441.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存