Xamarin iOS UIAlertController не отображается - PullRequest
0 голосов
/ 07 октября 2018

В моей программе, когда вы нажимаете кнопку «Пуск» на первом контроллере представления, он переносит вас в новый контроллер представления, называемый VCLoadLocalData.Когда этот контроллер загрузки загружается, он проверяет, существует ли определенный текстовый файл, если он это делает, он показывает одно предупреждение, требующее ввода данных пользователем, если нет, он показывает другое предупреждение.На данный момент UIAlertController не появляется;Я пробовал это с UIAlertView, но я не знал, как вернуть ответ пользователя или чтобы он вызвал метод.Вот код, который у меня есть для VCLoadLocalData:

using Foundation;
using System;
using System.IO;
using System.Threading.Tasks;
using UIKit;

namespace SixthFormFinder
{

    public partial class VCLoadLocalData : UIViewController
    {

        public VCLoadLocalData (IntPtr handle) : base (handle)
        {

        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.
            bool doesExist = File.Exists("UserData.txt");
            if (doesExist)
            {
                //UIAlertView alert = new UIAlertView()
                //{
                //    Title = "User Data Found",
                //    Message = "A version of your data has been found, do you want to use it?"
                //};
                //alert.AddButton("Yes");
                //alert.AddButton("No");
                //alert.Show();
                var alert = UIAlertController.Create("User Data Found", "A version of your data has been found, do you want to use it?", UIAlertControllerStyle.Alert);
                alert.AddAction(UIAlertAction.Create("Yes", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_Yes()));
                alert.AddAction(UIAlertAction.Create("No", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_No()));
                ShowViewController(alert, null);
            }
            else
            {

                var alert = UIAlertController.Create("No User Data", "No version of your user data was found, you will need to follow this setup", UIAlertControllerStyle.Alert);
                alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_No()));
                ShowViewController(alert, null);
            }
        }

        void Alert_Yes()
        {
            var alert = UIAlertController.Create("Yes", "Yes Test complete", UIAlertControllerStyle.Alert);
            ShowViewController(alert, null);
        }

        void Alert_No()
        {
            var alert = UIAlertController.Create("No", "No Test complete", UIAlertControllerStyle.Alert);
            ShowViewController(alert, null);
        }
    }
}

1 Ответ

0 голосов
/ 08 октября 2018

В методе ViewDidLoad представление не инициализируется. Вы можете переместить свой код в метод ViewDidAppear.

public override void ViewDidAppear(bool animated)
{
  base.ViewDidAppear(animated);

  bool doesExist = File.Exists("UserData.txt");
  if (doesExist)
   {
     var alert = UIAlertController.Create("User Data Found", "A version of your data has been found, do you want to use it?", UIAlertControllerStyle.Alert);
     alert.AddAction(UIAlertAction.Create("Yes", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_Yes()));
     alert.AddAction(UIAlertAction.Create("No", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_No()));
     ShowViewController(alert, null);
   }
  else
   {

     var alert = UIAlertController.Create("No User Data", "No version of your user data was found, you will need to follow this setup", UIAlertControllerStyle.Alert);
     alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_No()));
     ShowViewController(alert, null);
    }
}

Обратите внимание, что этот код может выполняться несколько раз, когда VCLoadLocalData появляется. Так что, если вы просто проверьте его один раз. Вы можете улучшить код.

 . . .
 private bool isFirstLoad = true;
 . . .
 public override void ViewDidAppear(bool animated)
 {
   base.ViewDidAppear(animated);

   if(isFirstLoad)
   {
    isFirstLoad=false;
    bool doesExist = File.Exists("UserData.txt");
    if (doesExist)
     {
      var alert = UIAlertController.Create("User Data Found", "A version of your data has been found, do you want to use it?", UIAlertControllerStyle.Alert);
      alert.AddAction(UIAlertAction.Create("Yes", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_Yes()));
      alert.AddAction(UIAlertAction.Create("No", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_No()));
      ShowViewController(alert, null);
     }
    else
     {

      var alert = UIAlertController.Create("No User Data", "No version of your user data was found, you will need to follow this setup", UIAlertControllerStyle.Alert);
      alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, (UIAlertAction obj) => Alert_No()));
      ShowViewController(alert, null);
     }
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...