弹出窗口可见时禁用所有交互
Posted
技术标签:
【中文标题】弹出窗口可见时禁用所有交互【英文标题】:Disable all interaction when popover is visible 【发布时间】:2015-11-19 06:38:47 【问题描述】:我正在从左栏按钮操作中展示一个弹出控制器(带有ViewController.modalPresentationStyle = UIModalPresentationPopover;
)。在右栏按钮操作中,我触发了一个 push segue。理想情况下,当 popover 可见时,不应发生与 popover 后面的视图的交互。但是,即使弹出框可见,我也可以单击右侧栏按钮并推送新的视图控制器,而不会关闭弹出框。
我的代码是
- (UIViewController *)menuViewController
if (!_menuViewController)
_menuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TableViewController"];
_menuViewController.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popoverPresentationController = _menuViewController.popoverPresentationController;
popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
return _menuViewController;
- (IBAction)leftAction:(id)sender
self.menuViewController.popoverPresentationController.barButtonItem = sender;
[self presentViewController:self.menuViewController animated:YES completion:nil];
- (IBAction)rightAction:(id)sender
[self performSegueWithIdentifier:@"PushSegue" sender:nil];
NSLog(@"Crap here");
我尝试将 popover 演示控制器的 passthroughViews
设置为 nill 和空数组,但没有结果
当popover可见时如何禁用所有交互?
更新:
如果弹出框可见并且我们在导航栏中有任何交互,就会发生这种情况。简而言之,即使弹出框可见,它也会与导航栏进行交互。有什么办法可以禁用吗?
【问题讨论】:
【参考方案1】:在呈现弹出框后,在另一个运行循环中将 passthroughViews
设置为 nil。你可以这样做。
self.presentViewController(_menuViewController, animated: true) () -> Void in
dispatch_async(dispatch_get_main_queue()) () -> Void in
popoverPresentationController.passthroughViews = nil;
更多解释,请查看http://karmeye.com/2014/11/20/ios8-popovers-and-passthroughviews/
【讨论】:
以上是关于弹出窗口可见时禁用所有交互的主要内容,如果未能解决你的问题,请参考以下文章