iOS 对于Target-Action设计模式的理解

iOS
开发之Target-action模式Target-action:目标-动作模式,它贯穿于
iOS 开发始终。但是对于初学者来说,还是被这种模

式搞得一头雾水。

其实 Target-action
模式很简单,就是当某个事件发生时,调用那个对象中的那个方法。如:按下按钮时,调用
Controller
里边的 click
方 法。“那个对象”就是
Target,“那个方法”就是
Action,及
Controller
是 Targer,click
方法是 action。

一般 Target
都是 Controller,而
Action 有它自己固有的格式:-(IBAction)click:(id)sender。如下图所示,target
是处理交互事件的对象实例,action
是 target
对象中处理该事件的方法。

这里有两种方式给“炒菜”按钮设置
Action:1、直接拖拽连线

2、以代码的方式实现

在 iOS 中有一个
UIControl
类,该类中定义了一个

-(void)addTarget:(id)target
action:(SEL)forControlEvents:(UIControlEvents)controlEvents

方法,大部分视图类都继承自
UIControl 类,所以"炒菜"按钮可以使用该方法实现
Target-action模式。在
iOS 中这种设计模式被称作一个对象给另外一个对象发送消息。

- (void)viewDidLoad{
[super viewDidLoad]; //
给炒菜按钮添加点击事件
//
使用
Target-action
设计模式,在两个对象间直接发送消息[self.btnCooking addTarget:self action:@selector(pressCooking:)forControlEvents:UIControlEventTouchUpInside];}

1、self
指目标对象为当前对象,及
WViewController;

2、action
即 在目标对象上的点击方法;

3、何时调用该方法,UIControlEventTouchUpInside
即单击时。

“炒菜”按钮是一个可交互的视图控件,点击它后,它指定了一个
target(目标对象),并执行目标对象上指定的
action(方法)。

action 方法有以下几种形式:

- (void)doSomething;//
OR- (void)doSomething:(id)sender;//
OR-(IBAction)doSomething:(id)sender;//
OR-(IBAction)doSomething:(UIButton *) sender;

这里的 sender,发送者,就是对
“菜单”
按钮对象的引用。以下代码是完全用代码定义的一个
UIButton,并添加在
self.view
中:

- (void)viewDidLoad{
[super viewDidLoad]; //
实例化按钮,并设置按钮类型为圆角
UIButton *btnCustom = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
//
设置按钮大小btnCustom.frame = CGRectMake(124,
140,
73,
44);
//
设置按钮标题[btnCustom setTitle:@"点击我..."
forState:UIControlStateNormal];
//设置按钮点击事件
[btnCustom addTarget:selfaction:@selector(customButton)forControlEvents:UIControlEventTouchUpInside];
//
将按钮添加到
View[self.view addSubview:btnCustom];}/**
自定义按钮点击方法
*/-(void)customButton{
[self.lblDish setText:self.txtMaterial.text];}

UIButton 的几种触发方式:1、UIControlEventTouchDown

指鼠标左键按下(注:只是“按下”)的动作2、UIControlEventTouchDownRepeat

指鼠标左键连续多次重复按下(注:只是“按下”)的动作,比如,鼠标连续双击、三击、......、多次连击。

说明:多次重复按下时,事件序列是这样的:

UIControlEventTouchDown ->

(UIControlEventTouchUpInside) ->

UIControlEventTouchDown ->

UIControlEventTouchDownRepeat ->

(UIControlEventTouchUpInside) ->

UIControlEventTouchDown ->

UIControlEventTouchDownRepeat ->

(UIControlEventTouchUpInside) ->

......

除了第一次按下外,后面每次摁下都是一个UIControlEventTouchDown事件,然后紧跟一个UIControlEventTouchDownRepeat
事件。

3、UIControlEventTouchDragInside指按下鼠标,然后在控件边界范围内拖动。

4、UIControlEventTouchDragOutside

与 UIControlEventTouchDragInside
不同的是,拖动时,鼠标位于控件边界范围之外。

但首先得有个 UIControlEventTouchDown
事件,然后接一个
UIControlEventTouchDragInside事件,再接 一个
UIControlEventTouchDragExit
事件,这时,鼠标已经位于控件外了,继续拖动就是
UIControlEventTouchDragOutside
事件了。

具体操作是:在控件里面按下鼠标,然后拖动到控件之外。5、UIControlEventTouchDragEnter

指拖动动作中,从控件边界外到内时产生的事件。6、UIControlEventTouchDragExit

指拖动动作中,从控件边界内到外时产生的事件。7、UIControlEventTouchUpInside

指鼠标在控件范围内抬起,前提先得按下,即
UIControlEventTouchDown
或UIControlEventTouchDownRepeat
事件。

8、UIControlEventTouchUpOutside指鼠标在控件边界范围外抬起,前提先得按下,然后拖动到控件外,即UIControlEventTouchDown
->

UIControlEventTouchDragInside(n 个) ->

UIControlEventTouchDragExit ->

UIControlEventTouchDragOutside(n 个)

时间序列,再然后就是抬起鼠标,产生
UIControlEventTouchUpOutside
事件。

事例传送门:TargetActionPattern参考:

1、http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/TargetAction.html

2、http://blog.teamtreehouse.com/ios-design-patterns-target-action-part-1

3、http://developer.apple.com/library/ios/#documentation/uikit/reference/UIControl_Class/Reference/Reference.html

时间: 2024-10-26 04:06:23

iOS 对于Target-Action设计模式的理解的相关文章

UI开发----target/action设计模式和代理设计模式以及手势识别器

//  Created By 郭仔  2015年04月16日21:50:33 眼睛有点痛,视力也在急速下降,心灵之窗,注意保护! ================================================ 耦合是衡量?一个程序写的好坏的标准之?一, 耦合是衡量模块与模块之间关联程度的指标 "?高内聚,低耦合"是?面向对象编程的核⼼心思想: ================ 设计模式思想很重要的 ================== target/action设计模

target - action设计模式的思想

不同的实例点击效果不同:点击改变自身颜色,点击改变父视图颜色,点击修改视图位置.以上效果可由target - action设计模式实现. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor yellowColor]; CustomView *greenView = [[CustomView

UI基础:target...action设计模式,手势识别器.UIimageview

使用target..action和delegate设计模式可以实现解耦.使代码更加优化. 手势识别器: 手势识别器:是对触摸事件做了封装,无需自己去判断某个手势是否触发,手势识别器本身起到了识别作用,所在我们可以把重心放在识别之后该去做什么操作上面.很方便. 手势识别器是iOS中比较抽象的一个类,用于识别一个手势,所谓的手势:有规律的触摸. 手势识别器有7个子类: 分别是:轻怕手势,轻移手势,清扫手势,缩放手势,旋转手势,长按手势,以及屏幕边缘平移手势. 一旦指定的手势别识别了,就可以执行自定义

UI 04 target...action 设计模式

"高内聚,低耦合"是面向对象编程的核心思想. 使用 target-action 实现解耦. 需要目标去执行一个动作的地方. 例如, 定义一个继承于UIView 的MyButton 类, 让他能够有Button的点击方法. 代码如下: Mybutton.h: #import <UIKit/UIKit.h> @interface Mybutton : UIView //1.写一个自定义方法,把目标和对应动作传过来. - (void)addNewTarget:(id)target

target/action 设计模式

Target-Action模式是ObjC里非常常见的对象之间方法调用的方式,不过ObjC把方法调用叫做Send Message. 一帮情况在和UI打交道时候处理各种GUI上的事件会利用到这种模式.相对应的.NET上的处理模式就是delegate/event了. 不过,Target-Action拜C语言所赐,更是灵活很多,编译期没有任何检查,都是运行时的绑定. 看代码 首先我们创建一个继承UIView的类 1 #import <UIKit/UIKit.h> 2 3 @interface Touc

target/action 设计模式简单使用

Target-Action模式是ObjC里非常常见的对象之间方法调用的方式,不过ObjC把方法调用叫做Send Message. 一帮情况在和UI打交道时候处理各种GUI上的事件会利用到这种模式.相对应的.NET上的处理模式就是delegate/event了. 不过,Target-Action拜C语言所赐,更是灵活很多,编译期没有任何检查,都是运行时的绑定. 代码演示: 1.创建一个继承UIView的类 #import <UIKit/UIKit.h> @interface TouchView

iOS学习之MVC设计模式的理解

cocoa程序设计中的 模型-视图-控制器(MVC)范型. 什么是MVC? M.V.C之间的交流方式是什么样子的? 理解了MVC的概念,对cocoa程序开发是至关重要的. 一.MVC的概念 MVC是Model-VIew-Controller,就是模型-视图-控制器,这些都是什么东西呢? MVC把软件系统分为三个部分:Model,View,Controller.在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个. Model = 你的程序是

target-action设计模式--主要为Button的方法重写

新建两个类MainViewController/ButtonView ButtonView.h #import <UIKit/UIKit.h> @interface ButtonView : UIView //实现target-action设计模式 //点击的时候让谁去执行方法 @property (nonatomic , assign) id target; //要执行的方法 @property (nonatomic , assign) SEL action; //模拟一个UIButton的

UI-target...action设计模式,手势识别器.UIimageview

target-action设计模式 iOS设计模式之Target-Action主要是为了降低代码的耦合性.顾名思义      Target-Action模式就是指  目标-动作模式,它贯穿于iOS开发始终. 提到Target-Action,先说2个词     “高内聚,低耦合”      这主要是评价一个软件的好坏 它评判软件的好坏主要靠模板之间内聚是否高,模块间耦合度是否低. 其实Target-action模式很简单,就是当某个事件发生时,调用那个对象中的那个方法.比如:点击按钮时,调用Con

进击的UI---------------target/action设计模式&amp;Delegate&amp;手势识别

1.target/action设计模式: AppDelegate.m RootViewController.m ClickView.h ClickView.m ColorView.h ColorView.m RootView.h RootView.m ButtonView.h ButtonView.m 2.delegate设计模式(代理): AppDelegate.m RootViewController.m RootView.h: RootView.m: colorView.h colorVi