UIAlertController 上的 UITapGestureRecognizer 未触发
Posted
技术标签:
【中文标题】UIAlertController 上的 UITapGestureRecognizer 未触发【英文标题】:UITapGestureRecognizer on UIAlertController is not firing 【发布时间】:2019-06-21 14:40:18 【问题描述】:我正在尝试将 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);
);
理想情况下,我想在用户触摸弹出窗口时关闭警报,但我似乎无法检测到手势。
我尝试在显示警报之前和之后添加识别器。
【问题讨论】:
是的,这行不通 见这里***.com/a/36568023/2754727 我的解决方案对你有用吗? 【参考方案1】:解决方案:
要通过单击背景视图关闭UIAlertController
,您可以在弹出UIAlertController
时将tapGestureRecognizer
添加到屏幕中的最后一个视图,请检查以下代码:
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;
【讨论】:
这个解决方案对我不起作用。手势识别器动作仍未被调用。 @Dave 我使用该代码,它在我身边有效。我上传了sample here,你可以查看。你错过了什么吗?以上是关于UIAlertController 上的 UITapGestureRecognizer 未触发的主要内容,如果未能解决你的问题,请参考以下文章
无法在 iOS8 上的 UIAlertController 中显示 UIPickerView
iOS:UIAlertController 上的 textField 成为当前警报时的第一响应者
iOS - UIButton 作为 UIAlertController 上的子视图不触发事件
在呈现的视图控制器上的 UITableViewCell 中呈现 UIAlertController