本文将演示,如何通过一个对象作为另一个对象的属性,
从而通过设置属性的值,来实现对象之间的消息传递。
首先打开自定义视图的代码文件(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-10-14 18:44:32