iOS事件响应控制(二)

简介: iOS事件响应控制

2、寻找到应该响应的视图后,会进行消息处理,这个处理的方式是通过消息处理链来做的。如果它自身不能处理消息,会通过nextResponder将消息传递给下一个处理者,默认只要有一个view将消息处理了,这个消息处理传递链将不再传递。


现在,我们把刚才UIimageView里重写的hitTest:withEvent:方法注释掉,给btn添加一个点击方法,同时将用户交互关闭:


- (void)viewDidLoad {

   [super viewDidLoad];

   MyImageView * image = [[MyImageView alloc]initWithFrame:CGRectMake(60, 80, 200, 200)];

   MyButton * btn =[UIButton buttonWithType:UIButtonTypeSystem];

   image.userInteractionEnabled=YES;

   btn.frame=CGRectMake(20, 20, 40, 40);

   [btn setTitle:@"button" forState:UIControlStateNormal];

   [image addSubview:btn];

   [self.view addSubview:image];

 

 

   [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];

    btn.userInteractionEnabled=NO;

   // Do any additional setup after loading the view, typically from a nib.

}


-(void)click{

   NSLog(@"btn被点击了");

}

这样,我们的UIImageView又可以响应事件了,原因是事件处理传递链向下传递了。


现在,在回到我们刚开始的问题,如何让btn响应的同时imageView也响应,我们这样做:


- (void)viewDidLoad {

   [super viewDidLoad];

   MyImageView * image = [[MyImageView alloc]initWithFrame:CGRectMake(60, 80, 200, 200)];

   image.userInteractionEnabled=YES;

   MyButton * btn =[UIButton buttonWithType:UIButtonTypeSystem];

   btn.frame=CGRectMake(20, 20, 40, 40);

   [btn setTitle:@"button" forState:UIControlStateNormal];

   [image addSubview:btn];

   [self.view addSubview:image];

 

 

   [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];

   btn.userInteractionEnabled=NO;

   // Do any additional setup after loading the view, typically from a nib.

}


-(void)click:(UIButton *)btn{

   NSLog(@"btn被点击了");

   //响应链继续传递

   [btn.nextResponder touchesBegan:nil withEvent:nil];

 

}

结果如下:

image.png



虽然最终,我们完成了这个需求,可是我建议你最好不要这么干,因为这样的逻辑是违背现实生活中人们的行为认知的,更重要的是,我们的项目最后也确实改掉了这样的逻辑~~~

目录
相关文章
|
开发工具 iOS开发 git
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
207 0
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
|
iOS开发
iOS开发- runtime基本用法解析和用runtime给键盘添加工具栏和按钮响应事件
iOS开发- runtime基本用法解析和用runtime给键盘添加工具栏和按钮响应事件
136 0
|
测试技术 定位技术 开发工具
支付交易风险控制小知识:iOS设备限制境外交易
支付交易风险控制小知识:iOS设备限制境外交易
296 0
支付交易风险控制小知识:iOS设备限制境外交易
|
算法 iOS开发
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
239 0
iOS视图滚动的时候控制导航条标题及公告视图的alpha(显示与隐藏)
|
iOS开发
iOS按钮不响应点击事件
iOS按钮不响应点击事件
129 0
|
iOS开发
(七) IOS 响应者链和手势
(七) IOS 响应者链和手势
355 0
|
开发框架 开发工具 iOS开发
iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展(二)
iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展
239 0
iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展(二)
|
iOS开发
iOS事件响应控制(一)
iOS事件响应控制
165 0
iOS事件响应控制(一)
|
iOS开发 UED
iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展
iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展
298 0
|
Web App开发 JavaScript iOS开发
js控制ios设备在微信打开网页时,自动播放音乐
实际情形: 今天在公司做一个微页的项目,涉及到在微信里面点击链接或者是扫描二维码,打开链接的时候,自动播放音乐。 这个功能是非常简单的,直接在HTML页面插入如下代码即可。
1551 0