在展示一个视图控制器之前,我会将
我想知道,在呈现视图控制器后,是否可能知道它是作为气泡窗口呈现的还是其他方式呈现的?仅查看大小类不足以做到这一点,因为视图控制器可能会覆盖
显然,作为程序员的我应该知道是否覆盖了
以下是一些用于呈现视图控制器的代码:
modalPresentationStyle
属性设置为UIModalPresentationPopover
。这将在具有常规水平尺寸类(iPad和横向iPhone 6+)的设备上以气泡窗口的形式呈现视图控制器,在其他设备上则以模态/全屏的形式呈现。还可以通过重写adaptivePresentationStyleForPresentationController
来覆盖此行为,以便在所有设备上将视图控制器呈现为气泡窗口。我想知道,在呈现视图控制器后,是否可能知道它是作为气泡窗口呈现的还是其他方式呈现的?仅查看大小类不足以做到这一点,因为视图控制器可能会覆盖
adaptivePresentationStyleForPresentationController
。显然,作为程序员的我应该知道是否覆盖了
adaptivePresentationStyleForPresentationController
,但我想编写一个函数,在运行时通过传入视图控制器或者UIPopoverPresentationController
(或任何其他需要的对象)作为参数来确定任何视图控制器的情况。以下是一些用于呈现视图控制器的代码:
navigationController = (UINavigationController *)[MVSStore sharedInstance].addViewController;
navigationController.modalPresentationStyle = UIModalPresentationPopover;
[self presentViewController:navigationController animated:YES completion:^{}];
UIPopoverPresentationController *popoverController = navigationController.popoverPresentationController;
popoverController.sourceView = self.view;
popoverController.sourceRect = CGRectMake(20, 20, 20, 20); // Just a dummy
popoverController.permittedArrowDirections = UIPopoverArrowDirectionAny;
以下是用于检测视图控制器是否以弹出窗口的形式显示的当前代码。但正如上面提到的,它只查看大小类别,这对所有情况都不起作用。
+ (BOOL)willPresentTruePopover:(id<UITraitEnvironment>)vc {
return ([vc traitCollection].horizontalSizeClass == UIUserInterfaceSizeClassRegular);
}
我找不到UIViewController
或UIPopoverPresentationController
(或其他任何地方)中可以立即给我这些信息的属性或函数,但是也许我漏掉了什么?