弹出窗口可见时禁用所有交互

Joh*_*tty 2 objective-c uipopovercontroller modalviewcontroller ios uimodalpresentationstyle

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");
}
Run Code Online (Sandbox Code Playgroud)

我尝试将popover表示控制器设置passthroughViews为nill和空数组,但没有结果

如何在弹出窗口可见时禁用所有交互?

更新:

如果弹出窗口可见并且我们在导航栏中有任何交互,则会发生这种情况.简而言之,即使弹出窗口可见,它也会与导航栏进行交互.有没有办法禁用它?

Mun*_*eba 5

passthroughViews在呈现弹出窗口后,在另一个运行循环上设置为nil.你可以这样做.

self.presentViewController(_menuViewController, animated: true) { () -> Void in
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            popoverPresentationController.passthroughViews = nil;
        }
    }
Run Code Online (Sandbox Code Playgroud)

有关进一步说明,请查看此http://karmeye.com/2014/11/20/ios8-popovers-and-passthroughviews/