UITapGestureRecognizer на UIAlertController не запускается - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь подключить UITapGestureRecognizer к представлению UIAlertController, но событие распознавания никогда не запускается.

Я кодирую это в Xamarin, но мне кажется, что проблема относится и к нативному коду.

InvokeOnMainThread(() =>

    var alert = new UIAlertController();
    alert.Title = "My Title";
    alert.Message = "My Message";

    UITapGestureRecognizer tapGestureRecognizer = new 
        UITapGestureRecognizer((gesture) =>
        {
            //I never get here
        });

    alert.View.AddGestureRecognizer(tapGestureRecognizer);
    alert.View.UserInteractionEnabled = true;

    this.PresentViewController(alert, true, null);
});

В идеале я хотел бы отключить оповещение, когда пользователь касается всплывающего окна, но я не могу обнаружить жест.

Я пытался добавить распознаватель как до, так и после представления предупреждения.

1 Ответ

0 голосов
/ 24 июня 2019

Решение:

Чтобы отклонить UIAlertController, щелкнув фоновое представление, вы можете добавить tapGestureRecognizer к последнему представлению на экране, когда появляется UIAlertController, проверьте код ниже:

public partial class ViewController : UIViewController
{
    public ViewController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        // Perform any additional setup after loading the view, typically from a nib.

        var alert = new UIAlertController();
        alert.Title = "My Title";
        alert.Message = "My Message";

        UIAlertAction ac1 = UIAlertAction.Create("123",UIAlertActionStyle.Cancel,null);

        alert.AddAction(ac1);

        this.PresentViewController(alert, true, addGesOnBackGround);
    }

    public void addGesOnBackGround() {

        UIView backView = new UIView();

        Array arrayViews = UIApplication.SharedApplication.KeyWindow.Subviews;

        if (arrayViews.Length >0)
        {
            backView = arrayViews.GetValue(arrayViews.Length-1) as UIView;               
        }

        UITapGestureRecognizer tapGestureRecognizer = new
         UITapGestureRecognizer((gesture) =>
         {
             //I never get here
             this.DismissViewControllerAsync(true);

         });

        backView.AddGestureRecognizer(tapGestureRecognizer);
        backView.UserInteractionEnabled = true;
    }

}
...