• [Swift实际操作]八、实用进阶-(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                                          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( 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 }
  • 相关阅读:
    uni-app之预加载和取消预加载(仅支持APP和H5)——uni.preloadPage、uni.unPreloadPage
    JavaScript 之数组对象(Array)
    【2019csp模拟】文件列表
    【2019csp模拟】两段子序列
    B. 【普转提七联测 Day 6】载重
    C.【普转提七联测 Day 6】分数
    A. 【普转提七联测 Day 6】石头
    struct和class的区别
    TagHelper中获取当前Url
    为什么要使用 Taghelper (标记助手)
  • 原文地址:https://www.cnblogs.com/strengthen/p/9829477.html
Copyright © 2020-2023  润新知