Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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 如何处理自定义图幅的分接_Ios_Objective C_Uiview - Fatal编程技术网

Ios 如何处理自定义图幅的分接

Ios 如何处理自定义图幅的分接,ios,objective-c,uiview,Ios,Objective C,Uiview,我有一个自定义视图,上面有自定义弹出窗口(添加为子视图)。 当我打开这个弹出窗口时,它的框架脱离父视图框架。 而且我无法处理外部弹出视图上的用户交互。 我怎样才能修好它 我想到了这个计划: 1.在superview上添加自定义视图; 2.在superview上添加自定义弹出窗口(位于自定义视图上的正确位置) 但我认为这不是正确的方式。 有什么建议吗?老实说,我还没有尝试过,但您可能有幸在superview上添加了一个自定义视图,并覆盖了pointInside:withEvent: 我认为sup

我有一个自定义视图,上面有自定义弹出窗口(添加为子视图)。 当我打开这个弹出窗口时,它的框架脱离父视图框架。 而且我无法处理外部弹出视图上的用户交互。 我怎样才能修好它

我想到了这个计划: 1.在superview上添加自定义视图; 2.在superview上添加自定义弹出窗口(位于自定义视图上的正确位置)

但我认为这不是正确的方式。
有什么建议吗?

老实说,我还没有尝试过,但您可能有幸在superview上添加了一个自定义视图,并覆盖了
pointInside:withEvent:

我认为superview已经意识到轻触不会发生在它自己的帧内,所以它甚至不会检查它的子视图。但是,如果覆盖
pointInside:withEvent:
,则可以检查点击位置是否在子视图框架内,而不管它是否在superview的框架内


如果这不起作用,您可能还必须覆盖
hitTest:withEvent:
(或代替)。如果你需要更多的方向,我可以试着给出一个例子。

这个技术问答可能会帮助你解决问题。

你提到的实际上是正确的方法:你应该有一个超级视图(它可以是透明的(清晰的颜色)),其中包含自定义视图和框架内的弹出窗口

在iOS上,触摸事件被发送到您视觉层次结构中较低级别的接收器(我相信这是您的特定窗口)。此接收器在其子视图上调用HitTest,以确定将事件转发到哪个子视图。这种情况会递归发生,直到HitTest在视图的所有子视图上失败为止。然后,这些子视图的父视图处理(或不处理)触摸事件

但是在HitTest实现开始对子视图调用HitTest之前,它会调用superview上的PointInside。如果接触点的PointInside返回false,则HitTest返回null

因此,重写调用SuperView的类中的PointInside可能会解决您面临的问题,但不一定。您可能需要在superview的superview上覆盖PointInside,然后在该视图的superview上覆盖PointInside,依此类推。这不是一个好的解决方案,它是脆弱和粗糙的。重写PointInside确实有它的用途,但这不是用途之一

因此,尝试将所有视图保持在其superview的范围内,即使您必须创建一个透明的superview,该superview除了包含其他视图之外没有其他存在的理由。那很好