在下图中,S,P,C是UIView的所有子类。 C是P的孩子.P是S的孩子。我想要S和C来回应触摸,但我希望P忽略所有触摸并将它们传播到S。
_____________________
| S |
| ______________ |
| | P | |
| | | |
| | ___ | |
| | | | | |
| | | C | | |
| | |___| ___ | |
| | | | | |
| | | C | | |
| | |___| | |
| |______________| |
|____________________|
我不能只做p.userInteractionEnabled = NO
,因为这也会禁用C语言。
如果您想知道为什么我需要这样做,我希望有一个类似于Facebook聊天头的结构。头像,关闭按钮和评论模糊可以是我的C.它们都可以用P包裹,它具有透明背景并占据整个屏幕。 P是仅处理聊天逻辑的UIViewController的主视图。假设用户试图点击Like按钮(由S拥有)。然后P不应该阻止那个点击 - 它应该让S处理它。
答案 0 :(得分:3)
你可以子类化UIView并覆盖 - pointInside:withEvent:如下所示。
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGPoint localPoint = [self convertPoint:point fromView:self];
for (UIView *subview in self.subviews) {
if ([subview pointInside:localPoint withEvent:event]) {
return YES;
}
}
return NO;
}
答案 1 :(得分:0)
我会尝试将P一起切出画面,我不确定它作为容器的用途是什么。如果您希望同时管理多个C,请尝试将它们放入数组或IBOutletCollection(如果它们是IBOutlets)。您通常不希望屏幕上有两个viewControllers,具有相同的框架,两者同时可见(几乎完全是出于这个原因)。您可以考虑使用一个chatModel对象,它可以根据需要向S的viewController提供所需的信息,并让S直接呈现Cs。