我对iOS9中的UITextview有一个问题,当我在textview上长按时,它会显示放大镜。我尝试通过UILongPressGestureRecognizer禁用,它也完全禁用链接和手机触摸事件。
如何仅禁用放大镜。
override func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
if gestureRecognizer .isKindOfClass(UILongPressGestureRecognizer){
gestureRecognizer.enabled = false
}
super.addGestureRecognizer(gestureRecognizer)
}文本视图将位于集合视图单元格中。
发布于 2018-04-06 10:56:25
有一种方法可以实现这一点。只需覆盖UITextView的gestureRecognizerShouldBegin即可。这个手势识别器对象即将开始处理触摸,以确定其手势是否正在发生。唯一棘手的部分是正确识别分配给放大镜激活的委托。
我已经成功地使用UITextGestureClusterLoupe进行了测试。以下是工作示例(Swift 4):
override public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
{
if let gestureDelegate = gestureRecognizer.delegate {
if(gestureDelegate.description.localizedCaseInsensitiveContains("UITextGestureClusterLoupe"))
{
return false;
}
}
return true;
}发布于 2015-10-07 18:41:34
代码看起来是正确的,但您需要覆盖textView的gestureRecognizer,而不是超类。将super.addGestureRecognizer(gestureRecognizer)更改为yourTextView.addGestureRecognizer(gestureRecognizer),并将其放在包含文本视图出口的视图控制器中(如果还没有的话)。
发布于 2019-03-17 16:36:14
根据Vlada的回复,对于我的代码,我发现分配给放大镜激活的委托是"UITextLoupeInteraction“
下面是我的代码:
open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if let gestureDelegate = gestureRecognizer.delegate {
print(gestureDelegate.description)
if(gestureDelegate.description.localizedCaseInsensitiveContains("_UIKeyboardBasedTextSelectionInteraction")){
return false
}
if(gestureDelegate.description.localizedCaseInsensitiveContains("UITextLoupeInteraction")){
return false
}
}
return true
}我的开发环境: swift4、Xcode10.1、iOS 12.1
https://stackoverflow.com/questions/32988898
复制相似问题