ios中addtarget

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

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

一般Target都是Controller,而Action有它自己固有的格式:-(IBAction)click:(id)sender。

如下图所示,target是处理交互事件的对象实例,action是target对象中处理该事件的方法。

在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 = [UIButton buttonWithType:UIButtonTypeRoundedRect];    // 设置按钮大小    btnCustom.frame = CGRectMake(124, 140, 73, 44);    // 设置按钮标题    [btnCustom setTitle:@"点击我..." forState:UIControlStateNormal];    // 设置按钮点击事件    [btnCustom addTarget:self action:@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

时间: 2024-11-10 11:32:27

ios中addtarget的相关文章

ios中addtarget的用法

1.addtarget 的.部分使用事件没有直接的操作方式,需要进行调用.就要用addTarget. - (void)setupCustomView { self.customView = [[CHView alloc] init]; self.customView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:self.customView]; NSDictionary *viewsDictionar

iOS中touches事件,addtarget ...action和GestureRecognizer详解

刚学完uiview,uicontrol类,许多人知道 touchesBegain,touchesMoved,touchesEnd,GestureRecognizer的用途,但仔细考虑这些事件之间的关系,却令人头疼. 现在以一个例子来分析它们的内部实现: - (void)viewDidLoad { UIButton * btn=[[UIButton alloc]initWithFrame:CGRectMake(20, 40, 50, 50)]; [self.view addSubview:btn]

ios中UIControl详解

上篇讲到了UITouch和UIEvent事件,简单回顾一下,UIEvent是一系列UITouch的集合,在IOS中负责响应触摸事件.另外还提到了响应者链的概念,在IOS中,所有事件有一个最先响应者,事件可以沿着响应者链向下传递. 接下来是UIControl对象 UIControl是UIView的子类,当然也是UIResponder的子类.UIControl是诸如UIButton.UISwitch.UITextField等控件的父类,它本身也包含了一些属性和方法,但是不能直接使用UIControl

IOS中的手势识别

最近做项目需要用到手势识别,所以花了点时间去学习了一下,其实手势识别这部分的内容不多,还是很容易上手的. IOS中的手势一共有六种 :tap(点击),longPress(长按),swipe(挥动),pan(拖动),pich(缩放),rotation(旋转).这六个手势类都是继承自UIGestureRecongnizer,所以,先来看看UIGestureRecongnizer这个类. UIGestureRecongizer继承自NSObject,是以上六种手势的父类,定义了一些所有手势公用的属性和

iOS开发笔记--iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类:原文:http://my.oschina.net/aofe/blog/268749 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIRespon

iOS中的触摸事件

1.响应者对象 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”. UIApplication.UIViewController.UIView都继承自UIResponder,因此他们都是响应者对象,都能够接收并处理事件. 2.UIResponde UIResponder内部提供了以下方法来处理事件 触摸事件: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)e

深入了解iOS中的VC切换的传值方式

由于上次面试中有提到相关内容,所以这次我专门深入研究了iOS的几种方式: 首先把所有的传值方式都列出来,如果有遗漏,请指正 首先列出iOS中使用的传值方式: init 传值(即在创建VC的时候就对响应的参数进行设置) property 传值(即属性赋值) Router 传值(这个在OC中被使用,因为作者没有写Swift版本,所以先开个坑,估计我会填坑) Delegate 传值(通过协议和代理传值) 闭包(block)传值 (通过swift中的闭包,类似于OC中的block传值) Notifica

IOS中的多线程之GCD

在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central Dispatch) ,他是基于C语言开发的一套多线程开发机制,也是目前苹果官方推荐的多线程开发方法.GCD的抽象层次最高,用起来比较简单,但是因为它是基于C语言开发的,是面向过程的,所以在使用的时候不如面向对象的好理解.但是GCD这种机制相比较于前面两种多线程开发方式最显著的优点就是它对于多核运算更加

iOS中UITableViewController自带的刷新控件

iOS中UITableViewController自带的刷新控件 一.引言 在iOS开发中,使用tableView的界面,大多会用到一个下拉刷新的的控件,第三方库中,我们一般会选择比较好用的MJRefresh,其实,在iOS6之后,系统为我们提供了一个原生的刷新控件,使用起来非常方便,只是制定性不强,如果我们没有复杂的需求,使用UIRefreshControl也是不错的一个选择. 二.UITableViewController 相对于UIViewController,UITableViewCon