iOS 开发之Target-action模式
2016-06-22 10:59
471 查看
链接:http://www.jianshu.com/p/71df36144c08
Target-action:目标-动作模式,它贯穿于iOS开发始终。
其实Target-action模式很简单,就是当某个事件发生时,调用那个对象中的那个方法。如:按下按钮时,调用Controller里边的click方法。“那个对象”就是Target,“那个方法”就是Action,及Controller是Targer,click方法是action。
一般Target都是Controller,而Action有它自己固有的格式:-(IBAction)click:(id)sender。
如下图所示,target是处理交互事件的对象实例,action是target对象中处理该事件的方法。
27010535-ac3623b5132f4026ac8552247a4b7cf2.png.jpeg
这里有两种方式给“炒菜”按钮设置Action:
1、直接拖拽连线
27010719-1096542bfcae4545bf2afc48f95f6861.png.jpeg
2、以代码的方式实现
在iOS中有一个UIControl类,该类中定义了一个
方法,大部分视图类都继承自UIControl类,所以"炒菜"按钮可以使用该方法实现Target-action模式。在iOS中这种设计模式被称作一个对象给另外一个对象发送消息。
27003050-556548af74e74b84a647e302ea32ad12.png.jpeg
1、self 指目标对象为当前对象,及ViewController;
2、action 即 在目标对象上的点击方法;
3、何时调用该方法,UIControlEventTouchUpInside即单击时。
“炒菜”按钮是一个可交互的视图控件,点击它后,它指定了一个target(目标对象),并执行目标对象上指定的action(方法)。
action方法有以下几种形式:
这里的sender,发送者,就是对 “菜单” 按钮对象的引用。
以下代码是完全用代码定义的一个UIButton,并添加在self.view中:
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事件。
文/小猪也浪漫(简书作者)
原文链接:http://www.jianshu.com/p/71df36144c08
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
Target-action:目标-动作模式,它贯穿于iOS开发始终。
其实Target-action模式很简单,就是当某个事件发生时,调用那个对象中的那个方法。如:按下按钮时,调用Controller里边的click方法。“那个对象”就是Target,“那个方法”就是Action,及Controller是Targer,click方法是action。
一般Target都是Controller,而Action有它自己固有的格式:-(IBAction)click:(id)sender。
如下图所示,target是处理交互事件的对象实例,action是target对象中处理该事件的方法。
27010535-ac3623b5132f4026ac8552247a4b7cf2.png.jpeg
这里有两种方式给“炒菜”按钮设置Action:
1、直接拖拽连线
27010719-1096542bfcae4545bf2afc48f95f6861.png.jpeg
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]; }
27003050-556548af74e74b84a647e302ea32ad12.png.jpeg
1、self 指目标对象为当前对象,及ViewController;
2、action 即 在目标对象上的点击方法;
3、何时调用该方法,UIControlEventTouchUpInside即单击时。
“炒菜”按钮是一个可交互的视图控件,点击它后,它指定了一个target(目标对象),并执行目标对象上指定的action(方法)。
action方法有以下几种形式:
// 无参数无返回值 - (void)doSomething; // 有参数无返回值 - (void)doSomething:(id)sender; // 无参数有返回值 - (IBAction)doSomething; // 有参数有返回值 - (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事件。
文/小猪也浪漫(简书作者)
原文链接:http://www.jianshu.com/p/71df36144c08
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- iOS快速集成支付宝(完善版)
- AVFoundation的介绍
- iOS语音播放之切换听筒和扬声器的方法解决方案
- iOS常用的两种延时的方法
- IOS中Json解析实例方法详解(四种方法)
- iOS 数据存储的常用方式
- iOS 持续集成- Mac下命令启动和关闭Jenkins
- iOS 时间戳转化为时间
- iOS 把当前时间转化为时间戳
- iOS真机调试问题The certificate has either expired or has been revoked
- CocoaPods 使用时候的问题
- IOS应用内跳转系统设置相关界面的方法
- iOS通过html模版实现富文本编辑
- ios 动画学习的套路 (二)
- IOS热更新-JSPatch实现原理+Patch现场恢复
- JSBridge(Android和IOS平台)的设计和实现
- 转场动画
- 不容错过的iOS 8的导航交互
- 安装测试版ios10和xcode8.0beta(8S128d)