我有两个观点
顶视图完全覆盖底部视图,但由于顶视图具有透明区域,因此仍可以看到底部视图。
但是,由于topview阻止它,我无法再检测到底部视图上的按钮点击,我该怎么办?
是否有顶视图将触摸传递到底部视图?
答案 0 :(得分:4)
我自己的问题的解决方案,希望它有助于某人。
在前视图中,收听touchesEnded:withEvent
代表。
当此委托触发时,您知道用户正在触摸前视图。
接下来,您需要检查手指位置是否接触BOTTOM视图中的特殊区域。
该怎么做:
1)将点转换为相对底部视图:
UITouch *touch = [touches anyObject];
CGPoint touchPointInLowerView = [touch locationInView:self.lowerViewController.view];
BOOL isLowerButtonClicked = [self.lowerViewController isFingerOnYourButton:touchPointInLowerView];
if(isLowerButtonClicked)
{
// lower button clicked
}
2)在下方视图中
- (BOOL) isFingerOnYourButton:(CGPoint)point
{
return CGRectContainsPoint(self.aButton.frame, point);
}
瞧。通过这种方式,我们可以检测底部视图中的点击,即使它被顶部的另一个交互式视图阻止。
答案 1 :(得分:1)
在顶部视图中关闭阻止下方视图的用户互动:
topView.userInteractionEnabled = NO;
答案 2 :(得分:1)
如果您不希望顶视图(或其任何子视图)完全响应触摸,则可以将该视图的userInteractionEnabled
属性设置为NO并使用它完成。
否则,您最好的选择是覆盖顶级视图中的pointInside:withEvent:
或hitTest:withEvent:
。如果顶视图和底视图是兄弟姐妹,那么它应该足以从pointInside:withEvent:
返回NO;如果它们在视图层次结构中进一步分隔,则可能必须覆盖hitTest:withEvent:
以显式返回透明区域的底部视图。