本文将为你演示,如何使用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 = .purple
20 //设置文本框投影颜色
21         textField.layershadowColor = UIColor.black.cgColor
22 //设置文本框投影偏移距离
23         textField.layershadowOffset = CGSize(width: 0.0,height: 3.0)
24 //设置文本框的不透明度
25         textField.shadowOpacity = 0.45
26 //设置阴影的半径大小
27          textField.shadowRadius = 3
28 //设置文本框大背景颜色
29          textField.backgroundColor = .lightGray
30 //设置文本框的代理对象
31          textField.delegate = self
32
33 //将文本框添加到自定义视图之中
34          self.addSubview(textField)
35       }
36
37 //实现文本框代理协议中的方法,用来监听键盘上的回车键被按下的事件
38      func textFieldShouldReturn(_ textField: UITextField) -> Bool
39      {
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
54      override func didReciveMemoryWarning(){
55           super.didReceiveMemoryWarning()
56
57      }
58 }

然后在左侧的项目导航区,打开视图控制器的代码文件(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) - 40
15          let hei = 40
16
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,with: wid,height: hei))
22
23 //初始化提交按钮属性,并设置它的显示区域
24          submitButton = UIButton(frame: CGRect(x: 20,y: 240,with: wid,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 = .gray
33 //并设置按钮对象为不会响应交互事件的状态
34 //只有当文本框中的内容都被检验成功时,该按钮的状态才会恢复为正常。
35          submitButton.isEnabled = false
36 //将按钮对象添加到当前视图控制器的根视图
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 = true
62                submitButton.backgroundColor = .orange
63            }
64            else
65           {
66 //当两个文本框中的内容有一个不为空,或者全部为空时,设置按钮不可进行点击
67 //背景颜色改为灰色。
68                self.submitButton.isEnabled = false
69                self.submitButton.backgroundColor = .gray
70             }
71       }
72
73 //在该类文件中,添加一个析构方法,当该类的实例对象被销毁时,
74 //及时移除通知中心,以免造成资源的浪费
75      deinit
76      {
77          NotificationCenter.default.removeObserver(self)
78       }
79
80      override func didReciveMemoryWarning(){
81           super.didReceiveMemoryWarning()
82
83      }
84 }

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

转载于:https://www.cnblogs.com/strengthen/p/9834598.html

[Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递相关推荐

  1. [Xcode 实际操作]八、网络与多线程-(17)使用网址会话对象URLSession向远程服务器上传图片...

    目录:[Swift]Xcode实际操作 本文将演示如何通过网址会话对象URLSession向远程服务器上传图片. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模 ...

  2. [Xcode 实际操作]九、实用进阶-(24)使用Segue(页面的跳转连接)进行页面跳转并传递参数...

    目录:[Swift]Xcode实际操作 本文将演示使用Segue(页面的跳转连接)进行页面跳转并传递参数. 参照结合:[Xcode10 实际操作]九.实用进阶-(23)多个Storyboard故事板中 ...

  3. [Xcode 实际操作]八、网络与多线程-(19)使用RunLoop使PerformSelector方法延迟动作的执行...

    目录:[Swift]Xcode实际操作 本文将演示使用RunLoop使PerformSelector方法延迟动作的执行. 在项目导航区,打开视图控制器的代码文件[ViewController.swif ...

  4. 华为mate10 快捷计算机,华为mate 10功能系列:这三个快捷操作很实用,不知道那真是可惜!...

    原标题:华为mate 10功能系列:这三个快捷操作很实用,不知道那真是可惜! 各位有没有发现手机上的同一个功能却有多种的操作方式?或许在相同的应用使用上,等你好不容易打开了之后,别人可能都用完了,那么 ...

  5. 华为linux输入法,华为手机输入法隐藏7大不为人知的功能,非常规操作,实用又强大!...

    原标题:华为手机输入法隐藏7大不为人知的功能,非常规操作,实用又强大! 你只用华为手机输入法打字?这些隐藏的黑科技功能,如果你还不知道,那就实在是太可惜了,这些非常规操作实用又强大!一起来了解一下吧. ...

  6. 多功能工具箱微信小程序源码下载-操作简单实用流量主小程序

    这是一款多功能工具箱小程序! 目前由N款小功能组合成 比如: 图片拼接 九宫格切图 透明昵称 文字表情 等等上面说的只是一部分 该款小程序无需服务器与域名 使用微信开发者工具打开文件然后上传提交审核即 ...

  7. Windows操作系统环境下调查USB设备使用痕迹方法研究

    http://www.xsjs-cifs.com/article/2015/1008-3650-40-2-138.html Windows操作系统环境下调查USB设备使用痕迹方法研究 USB是一种外部 ...

  8. Linux 实用小脚本7(各种方法添加用户)

                        Linux 实用小脚本7(各种方法添加批量用户,用户存在就提示,不存在就添加) 前言: shell脚本的主要作用就是提升运维效率,用户对运维工作来说,通常是环境 ...

  9. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

最新文章

  1. 通俗易懂地解释遗传算法?有什么例子?
  2. 无符号数的减法_C++核心准则ES.107:不要使用无符号数下标,使用gsl::index更好
  3. head first Design Pattern State
  4. JavaScript简介-1
  5. window.parent和window.opener区别
  6. jcmd 命令_jcmd:一个可以全部统治的JDK命令行工具
  7. Qt C++ 命名空间namespaces讲解
  8. 无基础学python能干什么-呼市学Python语言能干什么
  9. 一、CC2530简介
  10. MATLAB的语言基础知识
  11. 至少连接一个aura sync兼容设备_EDA365:浅谈电磁兼容
  12. 挥泪告别鼠标,我终究还是学会了Windows快捷键
  13. 管家婆设计页面用什么做的_管家婆软件主要是用来做什么的?
  14. Theano入门神经网络(三)
  15. 敏捷项目管理术语大全
  16. win7计算机打开显卡设置在哪里,显卡设置在哪里打开【如何设置】
  17. 判断四个点是否在同一个平面上
  18. 23种设计模式的粗略介绍
  19. python热度评价指标_文本相似性热度统计方案(python版)
  20. FTP服务器-vsftpd

热门文章

  1. python flask 基础入门
  2. MySQL 插入数据时,中文乱码???问题的解决
  3. osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)的理解
  4. 业界资讯:adobe air 2.7 beta发布
  5. 安装sql server 2000时,提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作,需重起...
  6. 书写README的各种markdown语法
  7. “云栖直播”升级为“公开课”
  8. 《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能
  9. ORA-00119错误的解决。
  10. 转:[C/C++]2014年7月华为校招机试真题(一)