《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作

原创文章,欢迎转载。转载请注明:关东升的博客
 

目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制。

 

问题提出

如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击按钮的时候,标签文本会从初始的Label替换为HelloWorld。

 

ButtonLabelSample案例首先要解决的问题是:按钮点击事件后有谁负责响应事件?谁进行事件处理?要答这个问题,可以打开ButtonLabelSample案例故事板文件Main.storyboard,如图所示,OK按钮是在故事板文件Main.storyboard定义的,响应事件以及处理事件应该是在程序代码ViewController.swift实现的。那么如何将OK按钮点击事件与ViewController.swift中的事件处理代码关联起来?不同的计算机语言实现的方式不同,在iOS和OS X应用开发中是通过目标和动作机制实现事件处理的。

 

解决方案

按钮等控件是继承自UIControl类,具有一些高级事件,目标和动作机制就是将特地的控件事件与视图控制器(或视图)中方法关联起来,这个过程称为“定义动作事件”。“目标”是响应事件对象,为了方便访问其他的控件状态,这个对象一般是视图控制器(或视图)。“动作”是控件的事件。

ButtonLabelSample案例中按钮是在故事板文件(或Xib文件)中定义的,响应按钮点击事件(动作)是在视图控制器(目标)的方法中定义的,如下图所示,通过定义动作事件方式把目标与动作连接起来。

 

 

要实现目标与动作的连接有两种方式:InterfaceBuilder连线实现和编程实现。

1. Interface Builder连线实现

InterfaceBuilder连线实现就是故事板或Xib文件中,通过连线而现实。

2. 编程实现

编程实现是通过UIControl类addTarget(_:action:forControlEvents:)方法实现的,主要代码如下:

class ViewController:UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor =UIColor.whiteColor()

        let screen =UIScreen.mainScreen().bounds;

        let labelWidth:CGFloat = 90

        let labelHeight:CGFloat = 20

        let labelTopView:CGFloat = 150

        let label = UILabel(frame:CGRectMake((screen.size.width 

          Ê- labelWidth)/2 , labelTopView, labelWidth, labelHeight))

        label.text = "Label"

        //字体左右剧中

        label.textAlignment = .Center

        self.view.addSubview(label)

        let button = UIButton(type:UIButtonType.System)// 创建UIButton对象

        button.setTitle("OK",forState: UIControlState.Normal) 

        let buttonWidth:CGFloat = 60

        let buttonHeight:CGFloat = 20

        let buttonTopView:CGFloat = 240

        button.frame =CGRectMake((screen.size.width 

            Ê -buttonWidth)/2 , buttonTopView, buttonWidth, buttonHeight)

        button.addTarget(self, action:"onClick:", 

            Ê forControlEvents:UIControlEvents.TouchUpInside)

        self.view.addSubview(button)   

    }

    func onClick(sender: AnyObject) { 

        NSLog("OK Button onClick.")

    }    

    ...

}

上述代码中创建并设置UIButton对象,其中创建UIButton对象,参数type是设置按钮的样式,UIButton样式:

  • Custom。自定义类型。如果不喜欢圆角按钮,可以使用该类型。
  • System。系统默认属性,表示该按钮没有边框,在iOS 7之前按钮默认为圆角矩形。
  • Detail Disclosure。细节展示按钮,主要用于表视图中的细节展示。
  • Info Light和Info Dark。这两个是信息按钮,样式上与细节展示按钮一样,表示有一些信息需要展示,或有可以设置的内容。
  • Add Contact。添加联系人按钮

 

代码调用addTarget(_:action:forControlEvents:)方法,方法第一个参数是target,即事件处理对象,本例中是self;方法第二个参数是action,即事件处理对象中的方法,

代码中是"onClick:",方法第三个参数是事件,TouchUpInside事件是按钮的触摸点击事件。

如果调用如下无参数方法:

func onClick() {

}

调用代码如下:

button.addTarget(self,action: "onClick", 

        Ê forControlEvents:UIControlEvents.TouchUpInside)

区别在于action参数"onClick"方法名不同,action参数方法名的冒号暗示了方法名应该具有几个参数。如果要调用的方法是如下3个参数形式:

func onClick(sender: AnyObject, forEvent event: UIEvent) {

}

那么调用代码如下:

button.addTarget(self,action: "onClick:forEvent:",

        Ê forControlEvents:UIControlEvents.TouchUpInside)

其中"onClick:forEvent:"是调用方法名,onClick表示方法名也是,forEvent表示第二个参数的外部参数名。

 

 

 

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 

 

时间: 2024-08-03 04:08:12

《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作的相关文章

关东升的《从零开始学Swift》即将出版

大家好:   苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在<Swift开发指南>第1版的基础上添加Swift2.0的内容,同时摒弃第1版的一些不合理的内容,使得本书更加适合Swift开发者.我将连续发一些<从零开始学Swift>的学习笔记,有兴趣者,可以看一下. 书中源代码下载地址:http://51work6.com/swiftbook1.ph

关东升的《从零开始学Swift》3月9日已经上架

    大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全书共分5 部分,包括Swift语法篇.Cocoa Touch框架编程篇.混合编程篇.进阶篇和项目实战篇,囊括了开发工具介绍.语言基础知识,直至应用在App Store上线的所有内容.此外,本书前20 章专门配有同步练习,以帮助读者掌握所学知识.本书更加适合Swift开发者.大家可以看一下.http:/

Swift学习笔记(一)搭配环境以及代码运行成功

原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹果以后大力推广的语言哦!   2.Swift给你带来什么机会? 当初你觉得objc太难,学ios学到一半放弃拉,或者进入it行业大家都搞android,你也搞android去了.现在你终于有机会和搞ios的站在一个语言的起跑线上,兄弟!swift传说很容易学哦,搞android的你想不想增加一下本领

Swift学习笔记(3)iOS 9 中的网络请求

Swift学习笔记(3)iOS 9 中的网络请求 目录 Swift学习笔记3iOS 9 中的网络请求 目录 编码方法 请求方法 其他修改 完整代码 运行结果 编码方法 在iOS9中,以前常用的stringByAddingPercentEscapesUsingEncoding方法被废除了,取而代之的是stringByAddingPercentEncodingWithAllowedCharacters方法. 用法示例: var strURL=String(format:"http://blog.cs

Swift学习笔记(2)网络数据交换格式(XML,JSON)解析 [iOS实战 入门与提高卷]

Swift学习笔记(2)网络数据交换格式(XML,JSON)解析 参考书籍及资源:iOS实战 入门与提高卷 关东升 参考书籍地址 用NSXML来解析XML文档 用TBXML来解析XML文档 用NSJSONSerialization来解析JSON文档 目录 Swift学习笔记2网络数据交换格式XMLJSON解析 目录 用NSXML来解析XML文档 示例文档Notesxml 创建XMLParser类 调用与运行结果 用TBXML来解析XML文档 准备工作 创建XMLParser类 调用与运行结果 用

Swift学习笔记(1)过渡动画(CATransition和UIViewAnimation)的用法

Swift学习笔记(1)过渡动画(CATransition和UIViewAnimation)的用法 CATransition和UIViewAnimation是场景切换时常用的两种过渡动画 目录 Swift学习笔记1过渡动画CATransition和UIViewAnimation的用法 目录 CATransition CATransition的type属性 CATransition的subtype属性 代码示例 UIViewAnimationTransition UIViewAnimationTr

Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片

Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片 设备图片库和照相机是图像的两个重要来源,使用UIKit中提供的图像选择器UIImagePickerController可以轻易地实现从设备图片库和照相机获取图片. 目录 Swift学习笔记4使用UIImagePickerController实现从设备图片库和照相机获取图片 目录 声明协议 创建UIImagePickerController UIImagePickerControllerDe

【swift学习笔记】二.页面转跳数据回传

上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字,回传到父页面. 我是使用protocol去实现的回传.那让我们来创建一个protocol import Foundation protocol ValueBackDelegate { func ValueBack(value: String) } protocol可以理解为interface,ValueBa

《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器

原创文章,欢迎转载.转载请注明:关东升的博客   实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,示例代码如下: button.addTarget(self, action: "onClick:", forControlEvents: UIControlEvents.TouchUpInside) 其中的action参数"onClick:"事实上就是选择器(Selector).   问题提出 任