页面更改时 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);
我必须在 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);