首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passthrough Touch事件

Passthrough Touch事件
EN

Stack Overflow用户
提问于 2012-11-28 10:37:56
回答 2查看 912关注 0票数 0

将触摸事件传递到所有子视图的最佳方式是什么?

ViewController ->视图-> (subview1,subview2)

我希望subview1和subview2都能响应触摸事件。

EN

回答 2

Stack Overflow用户

发布于 2012-11-28 11:28:28

将子视图上的标签设置为明显的标签。然后在视图中进行树搜索,查找这些标记。不幸的是,在没有子类化的情况下,没有一种很好的方法可以做到这一点。如果你愿意子类化,那么你可以子类化view,然后在触摸时抛出一个NSNotification,这个子类的所有其他视图都会监听。

票数 1
EN

Stack Overflow用户

发布于 2012-11-28 11:29:01

在父级的触摸处理程序中,您可以遍历该视图的子视图并调用相同的处理程序:

代码语言:javascript
复制
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   for(UIView *subview in [self.view subviews]) {
       [subview touchesBegan:touches withEvent:event];
   }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
   for(UIView *subview in [self.view subviews]) {
       [subview touchesMoved:touches withEvent:event];
   }
}

或者,如果您需要标识特定的子视图,您可以将整数标记分配给子视图,以便稍后标识它们:

代码语言:javascript
复制
- (void)loadView {
   UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(10,10,10,10)];
   view1.tag = 100;
   [self.view addSubview:view1];

   UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(20,20,20,20)];
   view2.tag = 200;
   [self.view addSubview:view2];

}

然后在由触摸事件调用的ViewController方法中

代码语言:javascript
复制
- (void)touchEventResponder {
   UIView *view1 = [self.view viewWithTag:100];
   // Do work with view1
   UIView *view2 = [self.view viewWithTag:200];
   // Do work with view2
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13596875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档