如何将模态视图控制器中的触摸事件发送到父视图控制器?

3

我有一个基本视图控制器VC1和另一个以全屏方式模态呈现(在VC1上方)的视图控制器VC2。

VC2是半透明的,当用户点击或滚动时,我希望将所有触摸事件从VC2转发到VC1。(VC1具有一些按钮和scrollview)

我应该使用某种自定义容器吗?如何呈现VC2以覆盖整个屏幕并将所有触摸传递给VC1?模态是否正确的答案?

我已经尝试在VC2中将VC1存储为变量的引用,并通过touchesbegan将事件传递给VC1,但这没有起作用。

谢谢。


你想要什么?如果vc2中的scrollview正在滚动,vc1中的scrollview也会滚动吗?还是vc1只是捕获vc2中scrollview的滚动事件? - Nguyen Hoan
按钮和滚动视图都在VC1中。我希望在VC2上的任何触摸/按下都直接进入VC1并绕过VC2。 - freeBeerTomorrow
1个回答

0
如果你想将事件传递给不同的视图,则应该使用subView而不是VC2。
创建新的UIView *secondView,并将其添加为VC1的子视图。
[self.view addSubView:secondView];

不要将以下方法放在您的VC1中。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
   UIView *hitView = [super hitTest:point withEvent:event];

   // check your condition here, if button is pressed on secondView and you want to pass event on mainview the simply return mainView. This event will be passed to mainView.

   if ([secondView.button isEqual:hitView])
   {

      return self.view;
   }
   else
   {
      return nil;
   }

   return hitView;
 }

1
完全同意这种方法,但我已经使用了带有outlets/storyboard的VC,不想将所有内容重新制作为单独的uiview。有没有一种方法可以将视图控制器呈现为子视图? - freeBeerTomorrow
使用此链接:https://github.com/mohshin-shah/MSAlertView 从Storyboard中复制您的VC设计,创建新的xib并粘贴。 希望您不需要再次创建任何outlet。 这将把您的xib呈现为Viewcontroller视图的子视图。 - rushisangani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接