为有牺牲多壮志,敢教日月换新天。

[Swift实际操作]八、实用进阶-(5)通过间接代理进行对象间的消息传递

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

本文将为你演示,如何通过简介代理的方式,进行对象间的消息传递
在左侧的项目导航区,打开自定义视图的代码文件(CustomView.swift)。

 1 import UIKit
 2 
 3 class CustomView: UIView
 4 {
 5 //给自定义类添加一个文本框类型的属性
 6     var textField: UITextField!
 7 
 8 //重写初始化方法,
 9     override init(frame: CGRect)
10     {
11        super.init(frame: frame)
12 //接着对文本框属性进行初始化,并设置它的显示区域
13        textField = UITextField(frame:CGRect(x: 0,
14                                             y: 0,
15                                         width: self.frame.size.width,
16                                        height: self.frame.size.height))
17 //设置文本框字体大小
18         textField.font = UIFont.boldSystemFont(ofSize: 14)
19 //设置文本框字体颜色
20         textField.textColor = .purple
21 //设置文本框投影颜色
22         textField.layershadowColor = UIColor.black.cgColor
23 //设置文本框投影偏移距离
24         textField.layershadowOffset = CGSize(width: 0.0,height: 3.0)
25 //设置文本框的不透明度
26         textField.shadowOpacity = 0.45
27 //设置阴影的半径大小
28          textField.shadowRadius = 3
29 //设置文本框大背景颜色
30          textField.backgroundColor = .lightGray
31 //将文本框添加到自定义视图之中
32          self.addSubview(textField)
33      }
34 
35 //添加一个方法,用来设置文本框的代理对象。
36     func setController(controller: ViewController)
37     {
38 //在此将自定义视图所在的控制器,作为文本框的代理对象.
39 //然后打开并编辑视图控制器的代码文件(ViewController.swift)
40          self.textField.delegate = controller
41      }
42 
43 //需要实现指定的初始化方法
44     required init?(coder aDecoder: NSCoder)
45     {
46         fataError("init(coder:) has not been implemented")
47      }
48 }

接着编写代码,将自定义视图添加到当前的视图控制器之中。

 1 import UIKit
 2 //首先使当前的视图控制器类,遵循自定义的协议。
 3 class ViewController: UIViewController,UITextFieldDelegate{
 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.setController(controller: self)
21 //然后将自定义视图对象添加到当前视图控制器的根视图
22          self.veiw.addSubview(nameField)
23 
24 //对第二个自定义视图属性进行初始化,并设置它的显示区域
25          passwordField= CustomView(frame: CGRect(x: 20,y: 140,with: wid,height: hei))
26 //设置自定义视图中的文本框,
27          passwordField.setController(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 textFieldShouldReturn(_ textField: UITextField) -> Bool
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           return true
73        }
74  
75      override func didReciveMemoryWarning(){
76           super.didReceiveMemoryWarning()
77 
78      }
79 }

 

posted @ 2018-10-22 08:55  为敢技术  阅读(166)  评论(0编辑  收藏  举报