另外两个UIViews的UIVut上的UIButton对上面的观点做出了反应

时间:2013-10-22 12:58:37

标签: ios user-interface uiview storyboard layer

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

以下是我如何分层我的UIViews:

[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轴(无论哪一个)来解决这个问题,以确保按钮被显示并因此激活它(或者启用用户交互)。 / p>

if (_topView.frame.origin.y == 0) {
    self.refreshButton.userInteractionEnabled = NO;
} else {
    self.refreshButton.userInteractionEnabled = YES;
}

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

任何人都可以指出我正确的方向,这样我就可以在这里和那里没有丑陋的黑客攻击吗?

我正在使用Xcode 5.0的故事板。

干杯!

1 个答案:

答案 0 :(得分:1)

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

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