Ios 当popover可见时禁用所有交互

Ios 当popover可见时禁用所有交互,ios,objective-c,uipopovercontroller,modalviewcontroller,uimodalpresentationstyle,Ios,Objective C,Uipopovercontroller,Modalviewcontroller,Uimodalpresentationstyle,我正在通过左栏按钮操作演示一个popover控制器(带有ViewController.modalPresentationStyle=UIModalPresentationPopover;)。在右键操作中,我触发了一个按钮序列。理想情况下,当popover可见时,不应与popover后面的视图进行交互。但是,即使弹出框可见,我也可以单击右栏按钮并按下新的视图控制器,而不会关闭弹出框 我的代码是 - (UIViewController *)menuViewController { if (!

我正在通过左栏按钮操作演示一个popover控制器(带有ViewController.modalPresentationStyle=UIModalPresentationPopover;)。在右键操作中,我触发了一个按钮序列。理想情况下,当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 presentation controller的
passthroughViews
设置为nill和空数组,但没有结果

当popover可见时,如何禁用所有交互

更新:


如果popover是可见的,并且我们在导航栏中有任何交互,就会发生这种情况。简而言之,即使popover是可见的,它也会为导航栏提供交互。有没有办法禁用此功能?

在演示popover后,在另一个运行循环中将
passthroughview
设置为nil。你可以这样做

self.presentViewController(_menuViewController, animated: true) { () -> Void in
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            popoverPresentationController.passthroughViews = nil;
        }
    }
如需进一步解释,请检查此项