zoukankan      html  css  js  c++  java
  • [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式

    本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,
    该机制主要用于响应用户的界面操作。
    打开创建的空白项目。
    然后在左侧的项目导航区,打开视图控制器的代码文件:ViewController.swift

    第一种消息传递模式:

     1 import UIKit
     2 class ViewController: UIViewController{
     3 
     4   override func viewDidLoad(){
     5     super.viewDidLoad()
     6 //Do any additional setup after loading the view, typically from a nib.
     7 //现在开始编写代码创建一个简单的按钮控件
     8 //定义一个整形常量,作为按钮的宽度,该宽度的值为当前屏幕的宽度和40的差
     9     let wid = Int(self.view.frame,size.width - 40)
    10 //然后创建一个指定区域的按钮控件,它的坐标位于(20,100),高度为40,宽度为常量的值
    11     let greetingButton = UIButton(frame:CGRect(x: 20,y: 100, wid,height: 40))
    12 //设置按钮在正常状态下的标题文字
    13     greetingButton.setTitle("Greeting",for: .normal)
    14 //设置按钮的背景按钮为橙色
    15     greetingButton.backgroundColor = .orange
    16 //使用Target-Action方式,给按钮对象绑定点击事件。
    17 //响应该事件的方法为ViewController类中的buttonTapped方法,
    18 //将在下面代码中完成该方法的编写
    19 //如果方法位于当前的类中,可以省略方法名称前方的类名action:#selector(buttonTapped),
    20     greetingButton.addTarget(self,
    21                            action:#selector(ViewControler.buttonTapped),
    22                               for: .touchUpInside)
    23 //将按钮对象添加到当前视图控制器的根视图。
    24     self.view.addSubview(greetingButton)
    25   }
    26 
    27 //添加一个方法,作为Target-Action中的Action,用来响应按钮的点击事件。
    28    @objc func buttonTapped()
    29    {
    30       print("strengthen")
    31     }
    32      
    33    override func didReceiveMemoryWarning(){
    34      super.didReceiveMemoryWarning()
    35      //Dispose of any resources that can be recreated.
    36 
    37    }
    38 }

    第二种消息传递模式:

     1 import UIKit
     2 class ViewController: UIViewController{
     3 
     4   override func viewDidLoad(){
     5     super.viewDidLoad()
     6 //Do any additional setup after loading the view, typically from a nib.
     7 //现在开始编写代码创建一个简单的按钮控件
     8 //定义一个整形常量,作为按钮的宽度,该宽度的值为当前屏幕的宽度和40的差
     9     let wid = Int(self.view.frame,size.width - 40)
    10 //然后创建一个指定区域的按钮控件,它的坐标位于(20,100),高度为40,宽度为常量的值
    11     let greetingButton = UIButton(frame:CGRect(x: 20,y: 100, wid,height: 40))
    12 //设置按钮在正常状态下的标题文字
    13     greetingButton.setTitle("Greeting",for: .normal)
    14 //设置按钮的背景按钮为橙色
    15     greetingButton.backgroundColor = .orange
    16 //设置按钮的标识符为1,通过该标识符剋获得该按钮的控件
    17     greetingButton.tag = 1
    18 //给按钮绑定点击事件,
    19 //注意方法名称的右侧使用了(_:),小括号表示该方法拥有参数,下划线表示隐藏外部参数名。
    20     greetingButton.addTarget(self,
    21                            action:#selector(buttonTappedFor(_:)),
    22                               for: .touchUpInside)
    23 //将按钮对象添加到当前视图控制器的根视图。
    24     self.view.addSubview(greetingButton)   
    25   }
    26 
    27 //添加一个方法,用来响应按钮的点击事件。
    28    @objc func buttonTappedFor(_ sender: UIButton)
    29    {
    30 //获得按钮的标识值,并在控制台输出。
    31       let tag = sender.tag
    32       print("button tag: (tag)")
    33     }
    34      
    35    override func didReceiveMemoryWarning(){
    36      super.didReceiveMemoryWarning()
    37      //Dispose of any resources that can be recreated.
    38 
    39    }
    40 }

    第三种消息传递模式:

     1 import UIKit
     2 class ViewController: UIViewController{
     3 
     4   override func viewDidLoad(){
     5     super.viewDidLoad()
     6 //Do any additional setup after loading the view, typically from a nib.
     7 //现在开始编写代码创建一个简单的按钮控件
     8 //定义一个整形常量,作为按钮的宽度,该宽度的值为当前屏幕的宽度和40的差
     9     let wid = Int(self.view.frame,size.width - 40)
    10 //然后创建一个指定区域的按钮控件,它的坐标位于(20,100),高度为40,宽度为常量的值
    11     let greetingButton = UIButton(frame:CGRect(x: 20,y: 100, wid,height: 40))
    12 //设置按钮在正常状态下的标题文字
    13     greetingButton.setTitle("Greeting",for: .normal)
    14 //设置按钮的背景按钮为橙色
    15     greetingButton.backgroundColor = .orange
    16 //初始化一个选择器对象,并设置它的方法名称。
    17     let anotherMethod: Selector = #selector(buttonTappedFor(_:))
    18 //然后将该选择器对象,添加到按钮的目标之中,
    19 //使用该选择器中的方法,响应按钮的点击事件
    20     greetingButton.addTarget(self,
    21                            action:anotherMethod,
    22                               for: .touchUpInside)
    23 //将按钮对象添加到当前视图控制器的根视图。
    24     self.view.addSubview(greetingButton)
    25   }
    26 
    27 //添加一个方法,用来响应按钮的点击事件。
    28    @objc func buttonTappedFor(_ sender: UIButton)
    29    {
    30 //获得按钮的标识值,并在控制台输出。
    31       let tag = sender.tag
    32       print("button tag: (tag)")
    33     }
    34      
    35    override func didReceiveMemoryWarning(){
    36      super.didReceiveMemoryWarning()
    37      //Dispose of any resources that can be recreated.
    38 
    39    }
    40 }

    选择器和定时器搭配使用

     1 import UIKit
     2 class ViewController: UIViewController{
     3 
     4   override func viewDidLoad(){
     5     super.viewDidLoad()
     6 //Do any additional setup after loading the view, typically from a nib.
     7 //现在开始编写代码创建一个简单的按钮控件
     8 //定义一个整形常量,作为按钮的宽度,该宽度的值为当前屏幕的宽度和40的差
     9     let wid = Int(self.view.frame,size.width - 40)
    10 //然后创建一个指定区域的按钮控件,它的坐标位于(20,100),高度为40,宽度为常量的值
    11     let greetingButton = UIButton(frame:CGRect(x: 20,y: 100, wid,height: 40))
    12 //设置按钮在正常状态下的标题文字
    13     greetingButton.setTitle("Greeting",for: .normal)
    14 //设置按钮的背景按钮为橙色
    15     greetingButton.backgroundColor = .orange
    16 //定义一个新的选择器
    17     let newSelector = #selector(calledByController)
    18 
    19 //方式(1)通过视图控制器对象的perform方法,在子线程中调用该选择器 
    20     self.perform(newSelector)
    21 
    22 //方式(2)在子线程中调用选择器,传递的参数值为空,并延迟两秒执行。
    23     self.perform(newSelector,with: nil, afterDelay: 2.0)
    24 
    25 //方式(3)在主线程中调用选择你器,并等待动作的执行。
    26 //当对界面元素进行操作时,需要在主线程中进行
    27     self.perform(newSelector,
    28                    on: .main,
    29                  with: nil,
    30         waitUntilDone: true)
    31 
    32 //方式(4)最后选择在后台线程中运行整个方法,这样就无需关心后台线程中的方法的执行
    33     self.performSelector(inBackground: newSelector,with: nil)  
    34   }
    35 
    36 //实现选择器中的方法
    37    @objc func calledByController()
    38    {
    39       print("strengthen")
    40     }
    41      
    42    override func didReceiveMemoryWarning(){
    43      super.didReceiveMemoryWarning()
    44      //Dispose of any resources that can be recreated.
    45 
    46    }
    47 }
  • 相关阅读:
    ICONS-图标库
    图形资源
    vue项目中,如果修改了组件名称,vscode编辑器会在引入修改组件的名字处提示红色波浪线 The file is in the program because:Imported via xxx Root file specified for compilation .
    接口在dev环境报跨域问题(has been blocked by CORS policy:Response to preflight request doesn't pass access control check:No 'Access-Control-Allow-Origin' header ispresent on the requested resource.),qa环境正常
    阿里云occ的图片文件URL用浏览器直接打开无法访问,提示This XML file does noe appear to have any style information associated with it. The document tree is shown below.
    vue 项目使用element ui 中tree组件 check-strictly 用法(父子不互相关联的反显情况)
    高德地图进行线路规划绘制标记点操作(vue)
    vue中实现拖拽调整顺序功能
    2021-01-22 浏览器相关知识
    2021-01-22 js 相关知识点
  • 原文地址:https://www.cnblogs.com/strengthen/p/9806867.html
Copyright © 2011-2022 走看看