当呈现模态视图控制器时呈现视图控制器响应触摸事件

时间:2014-08-01 11:38:28

标签: ios modalviewcontroller presentmodalviewcontroller touch-event

以下是代码:

UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"StoryboardName" bundle:nil];
UIViewController *presentedViewController = [myStoryboard instantiateViewControllerWithIdentifier:@"IdentifierName"];
presentedViewController.modalPresentationStyle = UIModalPresentationFormSheet;

presentingViewController presentViewController:presentedViewController animated:NO completion:nil];

presentationViewController的视图不会响应任何触摸事件,但我希望它能够触摸事件,我该怎么办?感谢任何建议!

2 个答案:

答案 0 :(得分:1)

这是预期的行为,应该是您在大多数应用中看到的内容。 Apple的App Store应用程序确实允许您在模态表单之外点击以解除它,因此,它有一些先例可以接受,以有限的方式。如果您的设计绝对需要它,请考虑在显示的视图控制器中设置和拆除基于窗口的手势识别器。

例如,要实现tap-outside-to-dismiss行为,请在viewDidAppear:中配置点击手势识别器。您可以在viewWillDisappear:上删除它,如果它在被调用时仍然存在。

在点击处理程序中,您想要在窗口坐标中获取点按的位置,即:

CGPoint tapPoint = [recognizer locationInView:nil];

然后,您可以使用几何体进行一些检查,以查看是否在模态显示的视图上或外部(在与您的呈现视图控制器对应的灰色区域上)进行了点击。 UIView有一个pointInside:withEvent:方法可能有助于此。

答案 1 :(得分:-3)

以下是呈现viewcontroller的简单方法......

  ViewController *view = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
  [self presentViewController:view animated:YES completion:nil];

享受代码