我正在从左侧按钮操作中呈现一个弹出控制器(带ViewController.modalPresentationStyle = UIModalPresentationPopover;
)。在右键按钮动作中,我触发推送segue。理想情况下,当弹出窗口可见时,不应该发生与弹出窗口后面的视图的交互。但是,即使弹出窗口是可见的,我也可以单击右侧栏按钮并按下新视图控制器,而不会忽略弹出窗口。
我的代码是
- (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并清空数组,但没有结果
如果弹出窗口可见,如何禁用所有互动?
更新:
如果弹出窗口可见并且我们在导航栏中有任何交互,则会发生这种情况。简而言之,即使弹出窗口可见,它也会与导航栏进行交互。有没有办法禁用它?
答案 0 :(得分:5)
在呈现弹出窗口后,在另一个运行循环上将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/