[Swift4.2互动教程]八、实用进阶-(6)通过属性进行对象间的消息传递

本文将演示,如何通过一个对象作为另一个对象的属性,
从而通过设置属性的值,来实现对象之间的消息传递。
首先打开自定义视图的代码文件(CustomView.swift)

 1 import UIKit
 2 //使当前的自定义类,遵循文本输入框代理协议
 3 class CustomView: UIView,UITextFieldDelegate{
 4 //给自定义类添加一个文本框类型的属性
 5     var textField: UITextField!
 6 //添加一个视图控制器类的属性,并设置类型为弱引用,
 7 //向编译器说明自定义视图不会持有对控制器对象的引用。
 8     weak var controller: ViewController?
 9
10 //重写初始化方法,
11     override init(frame: CGRect)
12     {
13        super.init(frame: frame)
14 //接着对文本框属性进行初始化,并设置它的显示区域
15        textField = UITextField(frame:CGRect(x: 0,
16                                             y: 0,
17                                         width: self.frame.size.width,
18                                        height: self.frame.size.height))
19 //设置文本框字体大小
20         textField.font = UIFont.boldSystemFont(ofSize: 14)
21 //设置文本框字体颜色
22         textField.textColor = .purple
23 //设置文本框投影颜色
24         textField.layershadowColor = UIColor.black.cgColor
25 //设置文本框投影偏移距离
26         textField.layershadowOffset = CGSize(width: 0.0,height: 3.0)
27 //设置文本框的不透明度
28         textField.shadowOpacity = 0.45
29 //设置阴影的半径大小
30          textField.shadowRadius = 3
31 //设置文本框大背景颜色
32          textField.backgroundColor = .lightGray
33 //设置文本框的代理对象
34          textField.delegate = self
35
36 //将文本框添加到自定义视图之中
37          self.addSubview(textField)
38       }
39
40 //实现文本框代理协议中的方法,用来监听键盘上的回车键被按下的事件
41      func textFieldShouldReturn(_ textField: UITextField) -> Bool
42       {
43 //当键盘上的回车键被按下时,调用代理对象的协议方法,对文本框中的内容的合法性进行检验。
44          self.delegate?.checkForm()
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) - 40
15          let hei = 40
16
17 //然后对第一个自定义视图属性进行初始化,并设置它的显示区域
18          nameField = CustomView(frame: CGRect(x: 20,y: 80,with: wid,height: hei))
19 //设置自定义视图中的属性值为当前的视图控制器
20          nameField.controller= self
21 //然后将自定义视图对象,添加到前视图控制器的根视图
22          self.view.addSubview(passwordField)
23
24 //对第二个自定义视图属性进行初始化,并设置它的显示区域
25          passwordField= CustomView(frame: CGRect(x: 20,y: 140,with: wid,height: hei))
26 //设置自定义视图中的属性值为当前的视图控制器
27          passwordField.controller= self
28 //然后将第二个自定义视图对象添加到当前视图控制器的根视图
29          self.veiw.addSubview(passwordField)
30
31 //初始化提交按钮属性,并设置它的显示区域
32          submitButton = UIButton(frame: CGRect(x: 20,y: 240,with: wid,height: hei))
33 //设置按钮在正常状态下的标题文字
34          submitButton.setTitle("Sumbit",for: .normal)
35 //给按钮对象绑定点击事件
36          submitButton.addTarget(self,
37                                 action: #selector(ViewController.submitForm(_:)),
38                                 for: .touchUpInside)
39 //设置按钮对象的背景颜色为灰色
40          submitButton.backgroundColor = .gray
41 //并设置按钮对象为不会响应交互事件的状态
42 //只有当文本框中的内容都被检验成功时,该按钮的状态才会恢复为正常。
43          submitButton.isEnabled = false
44 //将按钮对象添加到当前视图控制器的根视图
45          slef.view.addSubview(submitButton)
46      }
47
48 //当点击按钮时在控制台输出一条日志语句,模拟表单的动作
49      @objc func submitForm(_ sender: UIButton)
50      {
51           print("summitForm...")
52       }
53
54 //接着添加一个方法,用来响应自定义视图中的文本框的回车键被按下的事件
55      func checkForm()
56      {
57 //当键盘中的回车键被按下时,对两个自定义视图中的文本框进行检验
58           if self.nameField.textField.text != "" && self.passwordField.textField.text != ""
59           {
60 //当两个文本框中的内容都不为空时,恢复提交按钮的可交互性,
61 //并调整按钮的背景颜色为橙色
62                self.submitButton.isEnabled = true
63                submitButton.backgroundColor = .orange
64            }
65            else
66           {
67 //当两个文本框中的内容有一个不为空,或者全部为空时,设置按钮不可进行点击
68 //背景颜色改为灰色。
69                self.submitButton.isEnabled = false
70                self.submitButton.backgroundColor = .gray
71             }
72       }
73
74      override func didReciveMemoryWarning(){
75           super.didReceiveMemoryWarning()
76
77      }
78 }

原文地址:https://www.cnblogs.com/strengthen/p/9829477.html

时间: 2024-07-31 20:37:27

[Swift4.2互动教程]八、实用进阶-(6)通过属性进行对象间的消息传递的相关文章

[Swift4.2互动教程]七、常见概念 - (2)点CGPoint和变形CGAffineTransform的使用

本文将为你演示点对象CGPoint的使用,其中CG表示来自CoreGraphic(核心图形)这个跨平台框架 首先导入需要使用的两个框架第一个框架表示界面工具框架第二个框架表示核心绘图和动画框架 1 import UIKit 2 import QuartzCore 定义一个点对象,并设置它的位置为原点.从右侧的结果可以看出,原点的x和y值都是0 let zeroPoint = CGPoint.zero 初始化另一个点对象 var point = CGPoint() 接着查看点对象的坐标值,从右侧的

[Swift4.2互动教程]七、常见概念 - (3)尺寸CGSize的使用详解

本文将为你演示CGSize的使用 首先导入需要使用到的两个框架 1 import UIKit 2 import QuartzCore 定义一个尺寸对象,尺寸对象包含宽度和和高度两个参数.从右侧的结果可以看出,此时该尺寸对象的宽度和高度都是0 let zeroSize = CGSize.zero 初始化另一个尺寸对象,并设置它的宽度为20,高度为10 let size = CGSize(width: 20, height: 10) 查看该尺寸对象的高度和宽度的数值 1 size.width 2 s

[Swift4.2互动教程]七、常见概念-(6)日期Date和DateFormatter日期的格式化

本文将为你演示日期类型的使用,以及如何对日期进行格式化. 首先引入需要使用到的界面框架 import UIKit 初始化一个日期对象,它的值和当前电脑中的日期相同 var date = Date() 获得当前60分钟之后的时间 date.addTimeInterval(60 * 60) 获得当前60分钟之后的时间,并存储再一个常量之中. let sencondDate = date.addTimeInterval(60 * 60) 对两个时间进行比较,当时间小于进行比较的时间时,返回值为-1.比

[Swift4.2互动教程]七、常见概念-(10)使用UserDefaults和归档方式存取用户数据

在项目开发之中,你会经常需要将一些数据存储在本地,以便记录用户生产的数据或操作习惯.在项目文件夹上带点击鼠标右键.弹出右键菜单.本文将为你演示,存储用户数据的两种常用方式. 选择菜单中的创建新文件选项(New File),创建一个类文件,用来存档用户数据.在弹出的文件模板选择窗口中,保持默认的选项(Cocoa Touch Class),然后点击下一步按钮,进入下一步设置页面.在类名输入框内输入类的名称. Class: Person 接着输入父类的名称. Subclass of: NSObject

[Swift4.2互动教程]七、常见概念-(12)使用DispatchGroup(调度组)管理线程数组

本文将为你演示调度组的使用,使用调度组可以将多个线程中的人物进行组合管理,可以设置当多个相同层次的任务完成之后,再执行另一项任务. 首先导入需要使用的界面工具框架 import UIKit 在控制台输出一条日志语句,表示调试任务开始执行 print("Start the task and display teh Loading animation.") 接着初始化一个调度组对象. let gro =DispatchGroup() 同时运行多个任务,每个任务的启动时间是按照加入队列的顺序

[Swift4.2互动教程]七、常见概念-(13)使用UIScreen查询设备屏幕信息

本文将为你演示,如何获得设备的屏幕信息,了解设备的屏幕尺寸等信息,才能做出适配性更好的应用程序. 首先导入需要使用到的界面工具框架 import UIKit 然后通过UIScreen类,就可以获得设备的屏幕信息.这里获得设备的屏幕尺寸,点击显示结果图标,查看获得的结果 UIScreen.main.availableModes.description 从结果列表中可以看出,屏幕的宽度为2048像素,高度为1536像素.再次点击结果图标,关闭结果列表. [<UIScreenMode: ox60000

好程序员大数据实用教程之面向对象进阶

好程序员大数据实用教程之面向对象进阶:包的创建与使用 是对一个程序中指定功能的部分代码进行包装 ####构造方法 是一个方法 特殊点: 构造方法没有返回值,不是指的返回值类型是void,而是根本就不写返回值类型 方法名字和类名相同 构造方法不能用static来修饰 构造方法调用的时机: 通俗来讲:是在实例化一个对象的时候调用的 一般情况下,我们在构造方法中做什么: 对对象的某一些属性进行初始化赋值操作 实例化对象的过程: Person xiaoming = new Person(); new :

《互动教程 for Excel 2016》已成功发布在App Store

不看视频不看书,超级好玩的Excel教程! 单击.双击.长按.拖动及各种快捷键,就像您在真正的Excel 2016上操作一样! 比观看视频.阅读书籍更加有效.有趣! 哪里不会戳哪里,妈妈再也不会担心我的Excel了! 免费下载地址: https://itunes.apple.com/cn/app/hu-dong-jiao-cheng-for-excel/id1090726089?mt=8 [关于Excel互动教程] 1.Excel互动教程是一款简单.有趣.互动式的学习Office Excel 2

《互动教程 for Xcode7 & Swift2》已成功发布在App Store

不看视频不看书,超级好玩的Xcode教程 利用手指来互动式学习Xcode7 单击.双击.长按.拖动及Xcode7各种快捷键,就像您在真正的Xcode7上操作一样 无痛上手,比观看视频.阅读书籍更加有趣.更加有效的学习方式  变被动学习为主动学习,真正的iOS开发一点通,是您学习iOS移动开发的最佳方式 下载地址:https://itunes.apple.com/cn/app/hu-dong-jiao-cheng-for-xcode7/id1063100471?mt=8 [互动教程 for Xco