Ios 其他两个UIView后面的UIView上的UIButton对上面视图的触摸作出反应
在过去几周里,我一直在玩后端的东西和Objective-C,现在才开始学习iOS GUI。我偶然发现了一个棘手的情况,我已经设法解决了,但我想知道是否有更好的方法来解决它 以下是我对UIView的分层方式: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];
[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];