UIAlertController Действие не показывает UIView - PullRequest
0 голосов
/ 15 января 2019

Диалог прогресса просто не хочет показываться, он как скрытый или что-то в этом роде Пожалуйста, смотрите предпринятые шаги и пример кода.

У меня есть следующие шаги

  1. Показано модальное (список данных)
  2. Отображается UIAlertController (срок действия пароля истек, необходимо повторно ввести пароль)
  3. Индикатор прогресса над лайт-шоу (UIView)
  4. Сервисный вызов выполняется до завершения
  5. Отклонить индикатор выполнения

UIAlertController

private void ShowLogin(string message, Action<ExpiredResponseTypes> responseHandler)
{
     UIApplication.SharedApplication.InvokeOnMainThread(() =>
     {
         var loginAlertController = UIAlertController.Create("Enter password", "", UIAlertControllerStyle.Alert);

         //add login text
         {basic normal code}

         loginAlertController.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default,
          (actionHandler) =>
          {
              ShowProgress();
              var loginResult = HandleLogin();
              DismissProgress();
              loginResponseHandler(loginResult);
          }));
          AlertAutoLayoutHelper.TopLevelViewController().PresentViewController(loginAlertController, true, null);
   });
}

AlertAutoLayoutHelper.TopLevelViewController

public static UIViewController TopLevelViewController()
    {
        var window = new UIWindow(UIApplication.SharedApplication.KeyWindow.Frame);
        var vc = new UIViewController();
        vc.View.BackgroundColor = UIColor.Clear;
        window.RootViewController = vc;
        window.WindowLevel = UIWindowLevel.Alert + 1;
        window.MakeKeyAndVisible();
        return vc;
    }

ShowProgress

UIApplication.SharedApplication.InvokeOnMainThread(() =>
{
    var bounds = UIScreen.MainScreen.Bounds;
    loadingOverlay = new LoadingOverlay(bounds, optionalMessage, isSpecificLoader);

      if (UIApplication.SharedApplication.KeyWindow.RootViewController.ModalViewController != null)
      {
         UIApplication.SharedApplication.KeyWindow.RootViewController.ModalViewController.View.AddSubview(loadingOverlay);
      }
      else
      { UIApplication.SharedApplication.KeyWindow.RootViewController.View.AddSubview(loadingOverlay);
      }

         isProgressShowing = true;
 });

Накладка

 public class LoadingOverlay : UIView
    {
        UIActivityIndicatorView activitySpinner;
        UILabel loadingLabel;

        public LoadingOverlay(CGRect frame, string message = null, bool isSpecificLoader = false) : base(frame)
        {
            {just normal setup }
            AddSubview(activitySpinner);
            AddSubview(loadingLabel);
        }
    }

Примечание: диалог прогресса работает нормально для обычных ситуаций, отображается при вызове из UIViewController)

Я застрял на несколько дней, пожалуйста, помогите.

...