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
ios中addtarget的更多相关文章
- ios中addtarget的用法
1.addtarget 的.部分使用事件没有直接的操作方式,需要进行调用.就要用addTarget. - (void)setupCustomView { self.customView = [[CHV ...
- iOS中的存储方式
1.Plist 1.1 了解沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其它文件系统隔离.应用必须呆在自己的沙盒里.其它应用不能访问该沙盒. 一个程序中所有的非代码文件都可以 ...
- iOS中JS 与OC的交互(JavaScriptCore.framework)
iOS中实现js与oc的交互,目前网上也有不少流行的开源解决方案: 如:react native 当然一些轻量级的任务使用系统提供的UIWebView 以及JavaScriptCore.framewo ...
- IOS中的多线程之GCD
在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central D ...
- iOS中的触摸事件和手势处理
iOS中的事件可以分为三大类: 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并 ...
- [BS-25] IOS中手势UIGestureRecognizer概述
IOS中手势UIGestureRecognizer概述 一.概述 iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式: - (void)touches ...
- iOS中—触摸事件详解及使用
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...
- IOS中KVO模式的解析与应用
IOS中KVO模式的解析与应用 最近老翁在项目中多处用到了KVO,深感这种模式的好处.现总结如下: 一.概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修 ...
- 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密
在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...
随机推荐
- php微型mvc框架创建步骤
创建数据库和表结构,并且添加模拟数据: 新建models.views.controllers.utilities和include五个文件夹:models:模型层 model.php:模型基类 ...
- 对象图 Object Diagram
一.用一张图来介绍一下对象图的基本内容 二.对象图与类图的基本区别 三.对象图实例
- 一次失败的面试——IBM电话面试
前几天接到IBM的电话面试了,虽然被PASS了,还是发个博记录一下吧.这大概是我第一次比较正式的面试了,虽然只是通过电话,但是还是暴露出了自己的很多问题,总结下,前事不忘,后事之师嘛.:) 一号上午接 ...
- Careercup - Google面试题 - 4857362737266688
2014-05-04 00:10 题目链接 原题: Write a function return an integer that satisfies the following conditions ...
- Android ADB 端口占用问题解决方案
问题描述: The connection to adb is down, and a severe error has occured. You must restart adb and Eclips ...
- android中设置Animation 动画效果
在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...
- 高德开发 android 出现 key 鉴权失败
环境windows + android studio 原因: 曾经更改过key.store 解决办法: 首先运行cmd移动到keystore的目录下keytool -list -keystore 文件 ...
- RabbitMQ学习(1):安装
1.安装 Erlang,官网:https://www.erlang.org/ 2.安装RabbitMQ服务器,rabbitMQ server,官网http://www.rabbitmq.com/ 注: ...
- js遍历集合
首先,描述一下问题.由于需要后台取出数据,遍历展示在table中,大体如下: 后台取出的是 Map<String , List<Object>>,下面是我写得比较朴素一点的写法 ...
- Spring+Mybatis+Maven 整合配置
<?xml version="1.0" encoding="UTF-8"?> <beans default-autowire="by ...