我在我的应用程序中遇到了一个错误,它导致手势停止工作,这是我以前通过addGestureRecognizer:添加到一个addGestureRecognizer:中的。本质上,我在tap和long press手势识别器中添加了一个UITextField (它已经从iOS应用了7个手势识别器)。在记录self.textField.gestureRecognizers时,它会显示现有的7个手势,然后显示我在数组末尾添加的两个手势。手势就像我预期的一样。
然而,当我呈现一个模态视图控制器,然后将其关闭时,我的两个手势就停止了在文本字段上的工作。我不清楚为什么,但是视图确实消失了,并且它是resignsFirstResponder (当模态VC出现时键盘总是打开),这可能是相关的。但是我发现这些手势并没有从文本字段中移除,但是数组中手势的顺序已经改变了。我的自定义手势现在位于索引0和1,而不是7和8。我认为7种默认手势相互冲突/覆盖了我的自定义手势(我假设以后在数组中的位置会覆盖前面的手势),这就解释了为什么即使它们仍然被应用,它们也会停止工作。
我的问题是:
self.textField.gestureRecognizers中的元素吗?UITextField的默认手势我目前的解决方案是第一次添加这两个手势,然后存储总计(9)手势的数组,然后在viewDidAppear中将gestureRecognizers数组(是的是可设置的)更改到存储的数组中。这保证数组将是7个内置的手势,然后是我的两个自定义手势的顺序。但是我发现我的手势覆盖了默认的手势(弹出弹出以剪切、复制等等),所以在我的自定义手势发生后,我必须将手势重新设置为默认的7(这很好--我只需要在识别自定义手势后一次触发动作)。简单到可以这样做--我也将原始手势存储在一个属性中。但这并不是最好的解决办法。我更愿意找出原因并解决这一问题,或者以不同的方式处理这一情况,而不是把代码粘在一起。
发布于 2014-05-17 04:24:25
我的第一个解决方案是总是在viewDidAppear中添加我的两个手势
当视图控制器的视图第一次出现时,会调用viewDidAppear:,但当呈现的视图控制器被取消时,也会再次调用它。
因此,您要添加两次手势识别器。
最简单的解决方案是使用BOOL实例变量(我们称之为“标志”),第一次将其设置为YES,然后进行测试:
if (!self.addedGestures) {
self.addedGestures = YES;
// ... add them! ...
}现在,您将只添加一次。
(另一方面,可能有人认为,如果您关心数组中手势识别器的顺序,您已经做错了什么。使用委托方法来解决手势识别器之间的冲突--这就是它们的目的。)
https://stackoverflow.com/questions/23707461
复制相似问题