Iphone 在UITextview中禁用放大镜

Iphone 在UITextview中禁用放大镜,iphone,uiscrollview,uitextview,Iphone,Uiscrollview,Uitextview,在UITextview中,当长时间按下触摸键时,放大镜显示。如何禁用它。最后,这个问题也得到了解决 以下是代码供参考,以防任何人需要 在子类UITextview的m文件中添加了代码 -(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { //Prevent zooming but not panning if ([gestureRecognizer isKindOfClass:[UILongP

UITextview
中,当长时间按下触摸键时,放大镜显示。如何禁用它。

最后,这个问题也得到了解决

以下是代码供参考,以防任何人需要

在子类UITextview的m文件中添加了代码

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{
    //Prevent zooming but not panning
    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) 
    {
        gestureRecognizer.enabled = NO;
    }
    [super addGestureRecognizer:gestureRecognizer];
    return;
}
它很管用。

这对我很管用

@implementation CustomTextView 

- (NSArray *)selectionRectsForRange:(UITextRange *)range
{
    self.selectedTextRange = nil;
    return nil;
}

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    gestureRecognizer.delegate = self;

    [super addGestureRecognizer:gestureRecognizer];
    return;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return NO;
}

- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return [super caretRectForPosition:self.endOfDocument];
}


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if (([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && !gestureRecognizer.delaysTouchesEnded))
    {
        return NO;
    }
    else
        return YES;

}

@Irina的回答在iOS 9.x上部分有效(尝试轻触然后长按,您将有一个放大覆盖图),并在iOS 10上崩溃,原因如下:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“您无法更改代理。” UIViewControllerPreview失败关系手势的 识别器

以下代码适用于iOS 9.x和10.x,我能想到的每种轻触和/或长手势组合

注意我不保证它会被苹果的评论所接受


我们需要
UIScrollViewDelayedTouchesbegangeStureRecogniter
UIScrollViewPangTestureRecognitor
,以保持
UITextView
的滚动能力。这两个类都是私有API的一部分,因此使用它们的风险自负。
Swift 4版本@user1120133的答案:

    override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
      //Prevent long press to show the magnifying glass
      if gestureRecognizer is UILongPressGestureRecognizer {
        gestureRecognizer.isEnabled = false
      }

      super.addGestureRecognizer(gestureRecognizer)
    }
Xamarin.iOS:

  • 创建自定义UITextView
  • 覆盖
    UITextView上的
    gestureRecognitizerShouldBegin
    方法

  • 看看这个答案是什么。不需要子类。但如果我没有弄错的话,这将完全禁用长按。换句话说,如果您的文本视图包含URL链接或电话号码(如果您启用了检测),则长按时,您的文本视图将无法响应它们,对吗?是否还要禁用插入符号和文本编辑?看到这个答案->是的,就像@antf说的,这个代码完全禁用了链接、电话和事件上的触摸。在ios9中有同样的问题,我只需要解析MagingGlass,而不需要解析url和电话触摸事件。@Madhu检查我刚刚发布的答案。它可能会给你一些见解。
        override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
          //Prevent long press to show the magnifying glass
          if gestureRecognizer is UILongPressGestureRecognizer {
            gestureRecognizer.isEnabled = false
          }
    
          super.addGestureRecognizer(gestureRecognizer)
        }
    
    public override bool GestureRecognizerShouldBegin(UIGestureRecognizer gestureRecognizer)
    {
        if (gestureRecognizer is UILongPressGestureRecognizer ||
            gestureRecognizer.Name != "UITextInteractionNameLinkTap")
        {
            return false;
        }
        return true;
    }