首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止gestureRecognizers数组中元素的重新排序

防止gestureRecognizers数组中元素的重新排序
EN

Stack Overflow用户
提问于 2014-05-17 04:06:45
回答 1查看 130关注 0票数 0

我在我的应用程序中遇到了一个错误,它导致手势停止工作,这是我以前通过addGestureRecognizer:添加到一个addGestureRecognizer:中的。本质上,我在taplong press手势识别器中添加了一个UITextField (它已经从iOS应用了7个手势识别器)。在记录self.textField.gestureRecognizers时,它会显示现有的7个手势,然后显示我在数组末尾添加的两个手势。手势就像我预期的一样。

然而,当我呈现一个模态视图控制器,然后将其关闭时,我的两个手势就停止了在文本字段上的工作。我不清楚为什么,但是视图确实消失了,并且它是resignsFirstResponder (当模态VC出现时键盘总是打开),这可能是相关的。但是我发现这些手势并没有从文本字段中移除,但是数组中手势的顺序已经改变了。我的自定义手势现在位于索引0和1,而不是7和8。我认为7种默认手势相互冲突/覆盖了我的自定义手势(我假设以后在数组中的位置会覆盖前面的手势),这就解释了为什么即使它们仍然被应用,它们也会停止工作。

我的问题是:

  • 你知道它为什么要重新排列self.textField.gestureRecognizers中的元素吗?
  • 如何防止这种情况发生,以确保我的自定义手势始终有效,而不破坏UITextField的默认手势

我目前的解决方案是第一次添加这两个手势,然后存储总计(9)手势的数组,然后在viewDidAppear中将gestureRecognizers数组(是的是可设置的)更改到存储的数组中。这保证数组将是7个内置的手势,然后是我的两个自定义手势的顺序。但是我发现我的手势覆盖了默认的手势(弹出弹出以剪切、复制等等),所以在我的自定义手势发生后,我必须将手势重新设置为默认的7(这很好--我只需要在识别自定义手势后一次触发动作)。简单到可以这样做--我也将原始手势存储在一个属性中。但这并不是最好的解决办法。我更愿意找出原因并解决这一问题,或者以不同的方式处理这一情况,而不是把代码粘在一起。

EN

回答 1

Stack Overflow用户

发布于 2014-05-17 04:24:25

我的第一个解决方案是总是在viewDidAppear中添加我的两个手势

当视图控制器的视图第一次出现时,会调用viewDidAppear:,但当呈现的视图控制器被取消时,也会再次调用它。

因此,您要添加两次手势识别器。

最简单的解决方案是使用BOOL实例变量(我们称之为“标志”),第一次将其设置为YES,然后进行测试:

代码语言:javascript
运行
复制
if (!self.addedGestures) {
    self.addedGestures = YES;
    // ... add them! ...
}

现在,您将只添加一次。

(另一方面,可能有人认为,如果您关心数组中手势识别器的顺序,您已经做错了什么。使用委托方法来解决手势识别器之间的冲突--这就是它们的目的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23707461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档