添加 SubView 后在 SuperView 中获取 Touches
Posted
技术标签:
【中文标题】添加 SubView 后在 SuperView 中获取 Touches【英文标题】:Get Touches in SuperView after adding SubView 【发布时间】:2012-03-23 01:43:21 【问题描述】:从 XCode 4.2 中的 Single View ios 模板开始,我在 .xib 中添加了第二个视图,主视图上的“超级”按钮和子视图上的“子”按钮。我希望能够同时点击这两个按钮。
在视图控制器的界面中,我添加了:
IBOutlet UIView *subView;
然后在我的视图控制器的 viewDidLoad 方法中,我添加:
[self.view addSubview:subView];
在[super viewDidLoad]之后;
subView 的背景为“clear”,两个窗口都设置为“User Interaction Enabled”。
当我运行应用程序时,只有“子”按钮是可点击的。我可以看到“超级”按钮,但它似乎没有收到触摸,据我从 Apple 的文档中可以看出,这应该是默认行为(视图的透明区域应该允许触摸通过)。
【问题讨论】:
【参考方案1】:这不是发生的事情,如果你把一个视图放在另一个视图前面,后面的视图将不会收到触摸。
您可以在前视图中禁用用户交互,因此后视图将接收到触摸。
但我认为您希望前视图和后视图可点击,在这种情况下您需要做的是获取触摸并将其发送到后视图,并在后视图中处理它。
我不知道你想做什么,但我认为,你可能可以做出比这更好的选择。
您可以在 *** 中查看这个问题: detect touch on a view behind another view?
编辑:
你有很多选择来发送触摸。
你可以这样做(这不是一个好的选择):
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
for (UITouch *touch in touches)
for(UIView* v in self.view.subviews)
if([v pointInside:[touch locationInView:self.view] withEvent:event])
if ([v isKindOfClass:[UIButton class]])
[(UIButton*)v sendActionsForControlEvents:UIControlEventTouchUpInside];
您还可以编辑视图框架,使视图不会覆盖按钮。
您还可以将按钮带到新子视图的前面,执行以下操作:
[self.view addSubview:yourSubview];
[self.view bringSubviewToFront:yourButton];
你只需要发挥你的创造力;)
【讨论】:
【参考方案2】:您的第二个视图是内容(按钮)的大小还是整个视图的大小?您可能会发现将子视图设置为对象的大小比 320x480 更容易。然后在将其添加为子视图后通过 cgrectmake 对其进行对齐。
这比冒泡各种触摸更容易,这有点像噩梦。
【讨论】:
是整个视图的大小。对于这个项目,将其设为小视图会起作用,但我很想学习如何正确地为全屏叠加层添加修饰。以上是关于添加 SubView 后在 SuperView 中获取 Touches的主要内容,如果未能解决你的问题,请参考以下文章
关于 subview 在 Objective-C 中保留 superview 的问题
如何用户 XIB 使 SuperView 匹配 Subview 的框架? (Xcode 8)
我可以在 superView 中的特定点获取 subView 吗?