Swift 中替换默认手势识别器的正确方法

Correct way to replace a default gesture recognizer in Swift

我正在尝试禁用 UITextField 中的默认长按手势识别器,以便我可以添加自己的长按手势识别器。我执行此操作的代码如下所示:

    for recognizer:UIGestureRecognizer in textField.gestureRecognizers as! [UIGestureRecognizer] {
        if recognizer is UILongPressGestureRecognizer{
        recognizer = myCustomRecognizer
        }
    }

但这给了我一个运行时错误,说它在展开一个可选值时发现 nil,这让我觉得它没有找到任何手势识别器?这是正确的做法吗?

如有任何建议,我们将不胜感激。

我确定 UITextField 在内部实现中没有使用手势识别器,而是直接处理来自 UIControl methods 的触摸事件。

因此,我认为您有几个选择,因为您仍然试图使用相同的触摸行为,我建议您查看 UITextFieldDelegate methods and see if you can't override the behavior that way. Specifically, the textFieldShouldBeginEditing: 方法。

如果这不能让您完成您的尝试,那么您将不得不创建一个 UITextField 的自定义子类并自己实现触摸事件。这应该只作为最后的手段尝试。

Even if you subclass, you can still use the parent class behavior by calling super in each method you override.