页面更改时 UIAlert 消失

UIAlert disappears when the page is change

我必须在 Xamarin.Forms 中的 Appdelegate 和 MainAcvitivy 中显示 UI 警报对话框。对于android,没有问题,但对于ios,它不能正常工作。

首先,如果我使用 UIAlertView,它可以正常工作。

Task.Run(async () =>
            {
                await Device.InvokeOnMainThreadAsync(() =>
                {
                    var alertView = new UIAlertView("Title", $"Message", null, "OK") { UserInteractionEnabled = true };
                    alertView.Clicked += (sender, args) =>
                    {
                        File.Delete(errorFilePath);
                    };
                    alertView.Show();

                }).ConfigureAwait(false);

            }).ConfigureAwait(false);

但不幸的是 UIAlertView 已弃用。这就是为什么我使用 UIViewController.

然而,我可以在初始屏幕中看到大约 0.5 秒的警报,但在那之后,我显示我的主页并且警报消失了。

这是代码

            Task.Run(async () =>
        {
            await Device.InvokeOnMainThreadAsync(() =>
            {
              UIAlertController alertView = UIAlertController.Create("Title", $"Message", UIAlertControllerStyle.Alert);
                                    
              alertView.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, (action) => File.Delete(errorFilePath)));

              TopViewController.PresentViewController(alertView, true, null);
              //var appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
              //appDelegate.Window.RootViewController.PresentViewController(alertView, true, null);

            }).ConfigureAwait(false);

        }).ConfigureAwait(false);

这是我的 TopViewContoller

    public static UIViewController TopViewController
    {
        get
        {
            UIApplication.SharedApplication.KeyWindow.WindowLevel = UIWindowLevel.Alert +1;
            UIApplication.SharedApplication.KeyWindow.BackgroundColor = UIColor.Clear;
            UIApplication.SharedApplication.KeyWindow.UpdateConstraints();
            
            UIApplication.SharedApplication.KeyWindow.MakeKeyAndVisible();

            UIApplication.SharedApplication.KeyWindow.RootViewController.UpdateViewConstraints();
            
            return TopViewControllerWithRootViewController(UIApplication.SharedApplication.KeyWindow.RootViewController);
        }
    }

方法 TopViewControllerWithRootViewController 中的代码是什么样的?

能否将 TopViewController 替换为 UIApplication.SharedApplication.KeyWindow.RootViewController 然后再试一次?

以及为什么将代码放入 Task 中,这是不必要的。

删除外部任务并尝试以下代码,它在我这边工作正常。

UIAlertController alertView = UIAlertController.Create("Title", $"Message", UIAlertControllerStyle.Alert);
                                    
alertView.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, (action) => File.Delete(errorFilePath)));

UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alertView, true, null);