Отключить все взаимодействия, когда всплывающее окно видно

Я представляю всплывающий контроллер (с ViewController.modalPresentationStyle = UIModalPresentationPopover;) из действия кнопки левой панели. И в действии кнопки правой панели я запускаю push-переход. В идеале, когда всплывающее окно отображается, взаимодействие с представлениями позади всплывающего окна не должно происходить. Но даже если всплывающее окно видно, я могу щелкнуть кнопку правой панели и нажать новый контроллер представления, не закрывая всплывающее окно.

Мой код

- (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 в нулевой и пустой массив, но безрезультатно

Как отключить все взаимодействия, когда всплывающее окно видно?

ОБНОВЛЕНИЕ:

Это происходит, если всплывающее окно видно, и у нас есть какое-либо взаимодействие в панели навигации. Короче говоря, он принимает взаимодействие с панелью навигации, даже если всплывающее окно видно. Есть ли способ отключить это?


person Johnykutty    schedule 19.11.2015    source источник


Ответы (1)


Установите passthroughViews на ноль в другом цикле выполнения после представления всплывающего окна. Вы можете сделать так.

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/

person Muneeba    schedule 26.11.2015