首页 > 关于iOS事件传递

关于iOS事件传递

Button再接收到事件的时候,下面的子视图就接收不到了

怎么做可以让事件继续传递.


如果是在同一个.m中的话,你直接就可以在button的触发方法中处理button的响应以及下层View的响应。
如果下边的View是封装或者上层的button是封装在View或者其他中的话,你只能写代理或者加block了。


UIView实例有一个exclusiveTouch属性用于阻止touch event的继续传递。


button和被遮盖视图是什么关系?
1. 同级的话 在supview的中重写
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// 当touch point是在_btn上
CGPoint btnPointInA = [_btn convertPoint:point fromView:self];
if ([_btn pointInside:btnPointInA withEvent:event]) {
//这里你自己触发子视图的方法
return _btn;
}

return [super hitTest:point withEvent:event];

}

  1. 如果被遮盖视图是button的supview的话
    在button中重写

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
//这里做button的action
NSLog(@"B - touchesBeagan..");

// 把事件传递下去给父View
[self.nextResponder touchesBegan:touches withEvent:event];

}
感觉是挺奇怪的需求 不知道是否有帮助


UIView有一个属性userInteractionEnabled,该属性值设为NO,则可取消事件传递。
当视图对象的userInteractionEnabled设置为NO的时候,用户触发的事件,如触摸,键盘等,将会被该视图忽略(其他视图照常响应),并且该视图对象也会从事件响应队列中被移除。

【热门文章】
【热门文章】