Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 其他两个UIView后面的UIView上的UIButton对上面视图的触摸作出反应_Ios_User Interface_Uiview_Storyboard_Layer - Fatal编程技术网

Ios 其他两个UIView后面的UIView上的UIButton对上面视图的触摸作出反应

Ios 其他两个UIView后面的UIView上的UIButton对上面视图的触摸作出反应,ios,user-interface,uiview,storyboard,layer,Ios,User Interface,Uiview,Storyboard,Layer,在过去几周里,我一直在玩后端的东西和Objective-C,现在才开始学习iOS GUI。我偶然发现了一个棘手的情况,我已经设法解决了,但我想知道是否有更好的方法来解决它 以下是我对UIView的分层方式: [self.view.layer insertSublayer:_topView.layer above:self.view.layer]; [self.view.layer insertSublayer:_bottomView.layer above:self.view.layer];

在过去几周里,我一直在玩后端的东西和Objective-C,现在才开始学习iOS GUI。我偶然发现了一个棘手的情况,我已经设法解决了,但我想知道是否有更好的方法来解决它

以下是我对UIView的分层方式:

[self.view.layer insertSublayer:_topView.layer above:self.view.layer];
[self.view.layer insertSublayer:_bottomView.layer above:self.view.layer];
所以我有“基本”视图和一个ViewController。在这个视图中,我有两个子视图:topView和bottomView。我已经能够像我想要的那样操纵这些视图的原点,但即使它们在我的UIButton前面,它也会对触摸做出反应

我通过检查其中一个子视图原点的y轴(不管是哪个)来解决这个问题,以确保按钮被显示,从而激活它(或者启用用户交互)

我个人不喜欢这个解决方案,我想知道解决这个问题的更好方法是什么

有人能给我指出正确的方向吗?这样我就可以在没有任何难看的黑客攻击的情况下,让这层业务继续下去

我正在使用Xcode 5.0的故事板


干杯

插入子层根本不会影响触摸转发。视图的子视图(在您的示例中为按钮)只能通过在其上添加子视图来“覆盖”。如果您没有使用
CALayer
s的特殊原因,那么只需添加子视图,它就会以正确的方式处理触摸。像这样:

[self.view insertSubview:_topView aboveSubview:self.refreshButton];
[self.view insertSubview:_bottomView aboveSubview:self.refreshButton];

不要觉得这是一个黑客,这是一个完美的方式来完成你要做的事情。就感觉冗长而言,你的另一个选择是测试视图和处理一组触摸,这似乎比你在这里做的工作要多得多。你仍然需要有选择地启用和禁用用户与子视图的交互。我假设出于某种原因您需要子层,但在层次结构中堆叠视图要常见得多。无论哪种方式,userInteractionEnabled都是可行的。问题是按钮确实对触摸做出了反应,这在子视图中不会发生,因为默认情况下,
userInteractionEnabled
设置为
YES
。子视图和子层之间的区别正是用户交互处理——层不处理它,子视图处理它。我下班回家后会试一试。谢谢
[self.view insertSubview:_topView aboveSubview:self.refreshButton];
[self.view insertSubview:_bottomView aboveSubview:self.refreshButton];