Я работаю в xamarin.forms
проекте, и я застрял в проблеме.
Я хочу, чтобы основной экран оставался включенным всякий раз, когда отображается UIAlertController
(в терминах Android Toast
). Здесь для меня важны обе вещи.
При отображении предупреждения кнопки на фоне должны быть активными. А поскольку необходимо показать важное сообщение, предупреждение также должно появляться параллельно в течение заданного времени.
В Android Toast
не мешает взаимодействию с пользователем на главном экране. Могу ли я иметь такую же рабочую вещь в iOS?
Вот что я попробовал в моей службе зависимостей.
void ShowAlert(string message, double seconds)
{
try
{
if (alert == null && alertDelay == null)
{
alertDelay = NSTimer.CreateScheduledTimer(seconds, (obj) =>
{
Device.BeginInvokeOnMainThread(() =>
{
DismissMessage();
});
});
Device.BeginInvokeOnMainThread(() =>
{
try
{
alert = UIAlertController.Create("", message, UIAlertControllerStyle.Alert);
alert.View.UserInteractionEnabled = true;
topViewControllerWithRootViewController(UIApplication.SharedApplication.KeyWindow.RootViewController).PresentViewController(alert, true, () =>
{
UITapGestureRecognizer tap = new UITapGestureRecognizer(() => { }); // I have tried this but nothing happens
alert.View.Superview.Subviews[0].AddGestureRecognizer(tap);
});
}
catch (Exception ex)
{
var Error = ex.Message;
}
});
}
}
catch (Exception ex)
{
var Error = ex.Message;
}
}
void DismissMessage()
{
if (alert != null)
{
alert.DismissViewController(true, null);
alert = null;
}
if (alertDelay != null)
{
alertDelay.Dispose();
alertDelay = null;
}
}
UIViewController topViewControllerWithRootViewController(UIViewController rootViewController)
{
try
{
if (rootViewController is UITabBarController)
{
UITabBarController tabBarController = (UITabBarController)rootViewController;
return topViewControllerWithRootViewController(tabBarController.SelectedViewController);
}
else if (rootViewController is UINavigationController)
{
UINavigationController navigationController = (UINavigationController)rootViewController;
return topViewControllerWithRootViewController(navigationController.VisibleViewController);
}
else if (rootViewController.PresentedViewController != null)
{
UIViewController presentedViewController = rootViewController.PresentedViewController;
return topViewControllerWithRootViewController(presentedViewController);
}
}
catch (Exception)
{
}
return rootViewController;
}