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


    本文将为你演示,如何通过简介代理的方式,进行对象间的消息传递
    在左侧的项目导航区,打开自定义视图的代码文件(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                                          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( 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 }
  • 相关阅读:
    SpringCloud Ribbon实现负载均衡,SpringCloud Ribbon自定义策略
    springCloud zookeeper整合,Java Zookeeper微服务注册中心整合
    SpringCloud Eureka安装和使用,SpringCloud使用Eureka作为服务注册中心
    Linux yum安装Consul服务中心,Centos7在线安装consul
    SpringCloud consul安装和使用,Windows Consul安装和使用,Java consul服务中心安装和使用
    哔哩哔哩视频下载到电脑,bilibili UWP下载的视频重命名,blibli视频下载到电脑
    elasticsearch kibana安装和配置
    elasticsearch安装和配置,elasticsearch启动报错:can not run elasticsearch as root
    cmd打开当前文件所在目录,cmd进入当前文件目录,cmd进入指定目录
    京东到家 首页 笔记
  • 原文地址:https://www.cnblogs.com/strengthen/p/9828274.html
Copyright © 2020-2023  润新知