在UITextview中禁用Magnifing glass,但不禁用URL Link和Phone number事件

问题描述 投票:1回答:3

我在iOS9中遇到了UITextview的问题,当我在textview上进行长按时它会显示放大镜。我试图通过UILongPressGestureRecognizer禁用它,它也完全禁用链接和手机触摸事件。

如何仅禁用放大镜。

 override func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
    if gestureRecognizer .isKindOfClass(UILongPressGestureRecognizer){
    gestureRecognizer.enabled = false
    }
    super.addGestureRecognizer(gestureRecognizer)
}

textview将位于collectionview单元格中。

ios swift uitextview ios9
3个回答
3
投票

有一种方法可以实现这一目标。只需覆盖gestureRecognizerShouldBeginUITextView。该手势识别器对象即将开始处理触摸以确定其手势是否正在发生。唯一棘手的部分是正确识别分配给放大镜激活的委托。


我已成功测试:UITextGestureClusterLoupe。这是工作示例(Swift 4):

override public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
{
    if let gestureDelegate = gestureRecognizer.delegate {

        if(gestureDelegate.description.localizedCaseInsensitiveContains("UITextGestureClusterLoupe"))
        {
            return false;
        }
    }
    return true;
}

0
投票

代码似乎正确,但您需要覆盖textView的gestureRecognizer,而不是超类。将super.addGestureRecognizer(gestureRecognizer)更改为yourTextView.addGestureRecognizer(gestureRecognizer)并将其放置在包含文本视图出口的视图控制器中(如果它已经存在)。


0
投票

根据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

© www.soinside.com 2019 - 2024. All rights reserved.