UIAlertView 弹出窗口之间的 UIGestureRecognizer 事件

Posted

技术标签:

【中文标题】UIAlertView 弹出窗口之间的 UIGestureRecognizer 事件【英文标题】:UIGestureRecognizer event between UIAlertView pop-up 【发布时间】:2011-08-15 19:53:12 【问题描述】:

我有一个非常奇怪的问题,可能很难解释,但我感谢任何帮助或建议。

我有一个基本视图(视图 B),它有一个 UIGestureRecognizer 来检测左右手势。

在视图 B 的顶部,我有几个小视图(视图 C)覆盖了整个视图。 (把它想象成一个日历)。

在每个视图 C 上,我都有一个点击手势识别器和一个长按手势识别器。在点击手势时,我会显示一个 UIAlertView。

那么问题来了:

我可以点击视图 C,然后滑动视图 B,视图 B 滑动事件会在 UIAlertView 显示之前触发。这会使我的应用程序崩溃,因为当使用滑动事件删除视图 B 并且由于视图 C 位于视图 B 之上时,它们也会被删除,并且根本没有到达 alertView:clickedButtonAtIndex:。

是否有人对如何防止在 UIAlertView 显示之前发生滑动有任何想法?感谢您的帮助!

【问题讨论】:

【参考方案1】:

您可能想尝试在 .h 文件中创建一个全局 BOOL 变量,以说明点击事件是否已注册。在注册点击时调用的方法中,将变量设置为NO,在注册滑动时调用的方法中,检查BOOL变量是YES还是NO,以及如果是NO,则表示已注册点击,您不应继续使用滑动方法。然后,只需在 UIAlertView 已辞职后将 BOOL 变量设置为 YES。希望对您有所帮助!

【讨论】:

【参考方案2】:

如您所说,C 视图完全覆盖了视图 B。因此,除非已显示警报,否则不应注册 B 上的滑动手势。可以在(void)didPresentAlertView:(UIAlertView *)alertView;中添加B的手势识别器。

然后在alertView:clickedButtonAtIndex:中,可以移除B的手势识别器。

HTH,

阿克谢

【讨论】:

以上是关于UIAlertView 弹出窗口之间的 UIGestureRecognizer 事件的主要内容,如果未能解决你的问题,请参考以下文章

Swift 自定义 UIAlertView

如何让 UIAlertView 在 iPhone 应用程序第一次启动时只出现一次?

UIAlertView:UIAlertViewStyleSecureTextInput:数字键盘

应用访问地图服务时系统弹出UIAlertView,可以更改UIAlertView的消息吗?

App Store拒绝-内存弹出窗口

iOS自定义提示弹出框(类似UIAlertView)