Ios 如果存在';有许多相互竞争的警报吗?

Ios 如果存在';有许多相互竞争的警报吗?,ios,uikit,uialertcontroller,Ios,Uikit,Uialertcontroller,在iOS中,实际上一次可以发生许多警报 例如,如果您请求相册(或其他)权限,操作系统将发出警报。同时,程序员可以根据自己的意愿UIViewcontroller.present()一个UIAlertController实例 在这种情况下,首先会选择什么警报?我不知道内部实现,但根据我在iOS 10.1.1 real设备上的实验,警报按以下顺序显示 系统警报。由操作系统本身显示的警报。(如相册权限请求)这是最高优先级。如果出现此警报中的任何警报,则任何其他应用程序内警报将暂时隐藏,并在最终用户选择系

在iOS中,实际上一次可以发生许多警报


例如,如果您请求相册(或其他)权限,操作系统将发出警报。同时,程序员可以根据自己的意愿
UIViewcontroller.present()
一个
UIAlertController
实例


在这种情况下,首先会选择什么警报?

我不知道内部实现,但根据我在iOS 10.1.1 real设备上的实验,警报按以下顺序显示

  • 系统警报。由操作系统本身显示的警报。(如相册权限请求)这是最高优先级。如果出现此警报中的任何警报,则任何其他应用程序内警报将暂时隐藏,并在最终用户选择系统警报后再次显示。系统警报之间的优先级未知

  • 你的应用内警报。您一次只能显示一个应用内警报,因为您应该使用
    UIViewController.present
    方法在当前版本的iOS中显示警报。此方法将使用最近的表示上下文VC或其窗口的根VC。在这两种情况下,苹果实际上是在强制您一次只显示一个警报,并自己控制警报的显示优先级


  • 系统警报和您通过
    UIAlertController
    创建的警报,无论您添加多少,它都将始终显示最新的警报。想象一下数据结构
    堆栈
    。所有警报都将添加到堆栈中,然后以后进先出的顺序显示。当您逐个解除警报时,堆栈上的警报将逐个弹出。

    UIAlertController
    必须由
    UIViewController.present
    方法显示,并且使用该方法一次只能显示一个VC。您确定您的索赔吗?抱歉,我想更改我对用户创建的警报的立场。正如我们在请求权限时看到的,系统警报的行为类似于堆栈。另一方面,用户警报在用户第一次调用时只显示一次。第二次和随后的
    present
    调用将记录消息**警告:尝试在已呈现**的视图上呈现**,不鼓励**在分离的视图控制器上呈现视图控制器**。我想这就消除了困惑。