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.
我正在尝试禁用 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.