2

ViewController.modalPresentationStyle = UIModalPresentationPopover;左のバー ボタン アクションからポップオーバー コントローラー (を使用) を提示しています。右のバー ボタン アクションでは、プッシュ セグエをトリガーしています。理想的には、ポップオーバーが表示されている場合、ポップオーバーの背後にあるビューへの相互作用は発生しないはずです。ただし、ポップオーバーが表示されている場合でも、右のバー ボタンをクリックして、ポップオーバーを閉じずに新しいビュー コントローラーをプッシュできます。

私のコードは

- (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");
}

ポップオーバー プレゼンテーション コントローラーpassthroughViewsを nill と空の配列に設定しようとしましたが、結果はありません

ポップオーバーが表示されているときにすべての相互作用を無効にする方法は?

アップデート :

これは、ポップオーバーが表示されていて、ナビゲーション バーに何らかの操作がある場合に発生します。つまり、ポップオーバーが表示されている場合でも、ナビゲーション バーの操作を行います。これを無効にする方法はありますか?

4

1 に答える 1

6

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/を確認してください。

于 2015-11-26T06:14:59.000 に答える