【问题标题】:Objective C touch event lockingObjective C 触摸事件锁定
【发布时间】:2016-07-12 03:58:10
【问题描述】:

目前我遇到了一个问题,表格单元格允许触摸事件获取详细信息。但是,如果用户在 1 秒内按下单元格 2-4 次,则会导致多个视图推送到导航视图控制器上。当视图被弹出并且导航控制器无法进入子视图并返回时,这会导致明显的错误。导致多个陷阱,最不幸的是没有错误日志。但是,由于首先不应该支持这种行为。问题是除了线程锁定之外,还有其他方法可以防止 UiButtons 或表格单元格上的多个触摸事件吗?

--侧面信息-- 您可能想要的附加信息,由于 Xcode 7 中添加了 https 与 http 安全设置,我正在使用 Xcode 版本 6.4。如果更高版本的 Xcode 自动实施解决方案,那么也很高兴知道。谢谢你的帮助。

【问题讨论】:

  • 显示你的触摸代码。
  • 我会在一分钟后在这里发布一些。
  • 在下一个(推送的)UIViewController 中的 viewDidAppear 之前你做了太多的工作,这反过来又阻塞了 UI 线程。这会导致在您希望将转换操作输入到新的 UIViewController 时接收 UITouchEvent。我不建议使用用户交互启用标志。
  • 不幸的是,显示的大部分数据都不是静态的,这无济于事。它是高度动态的,并与其他 Views 元素共享许多共同属性。

标签: ios objective-c xcode6


【解决方案1】:

您可以在点击按钮(或单元格)后锁定它:

button.userInteractionEnabled = NO; 

或整个界面:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

并在转换/加载完成时解锁。

【讨论】:

  • 好像行得通,我试试看。
【解决方案2】:

如果您不想使用 GCD 限制触摸事件,UIButton 和 UIGestureRecognizer 都会公开一个 enabled 属性。您只需轻轻一按即可禁用该按钮,并在按下详细视图控制器后重新启用它。

重新启用它的简单方法是在控制器的 viewWillAppear 方法中推送详细视图 - 这样,当您返回该视图控制器时,enabled 属性将自动重置,而无需听UINavigationController转场等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多