![[Swift4.2互动教程]八、实用进阶-(7)使用通知的方法进行对象间的消息传递,第1张 [Swift4.2互动教程]八、实用进阶-(7)使用通知的方法进行对象间的消息传递,第1张](/aiimages/%5BSwift4.2%E4%BA%92%E5%8A%A8%E6%95%99%E7%A8%8B%5D%E5%85%AB%E3%80%81%E5%AE%9E%E7%94%A8%E8%BF%9B%E9%98%B6-%287%29%E4%BD%BF%E7%94%A8%E9%80%9A%E7%9F%A5%E7%9A%84%E6%96%B9%E6%B3%95%E8%BF%9B%E8%A1%8C%E5%AF%B9%E8%B1%A1%E9%97%B4%E7%9A%84%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92.png)
本文将为你演示,如何使用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)使用通知的方法进行对象间的消息传递所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)