禁用 UITextView 的放大镜但在 objective c 中启用 Link 和 phone 数字检测

Disable magnifying glass of UITextView But enable the Link and phone number detection in objective c

我在 iOS9 中遇到 UITextview 问题,当我在 textview 上长按时它显示放大镜。我试图通过 UILongPressGestureRecognizer 禁用,它也完全禁用 Link 和 phone 触摸事件。

如何仅禁用放大镜。 文本视图将位于 UITableView 单元格中。

UILongPressGestureRecognizer 如果使用 stroyboard 并且从代码中执行此操作,则取消选中取消触摸视图将其值设置为 false

检查 DetectLinks 取消选中可选择的,可编辑的

如果我理解正确,你想禁用放大镜,但系统 called.you 只能做的是更改 UIMenuController state:hiddenshowUIMenuItemUIMenuController 内。像这样

我终于自己解决了这个问题。在您的 UITextView 子类中,使用:

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
    // remove magnifying glass, still allowing link detection:
    if ([gestureRecognizer class] == [UILongPressGestureRecognizer class] || [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        [super addGestureRecognizer:gestureRecognizer];
    }
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    // remove magnifying glass, still allowing link detection:
    if ([gestureRecognizer class] == [UILongPressGestureRecognizer class] || [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}

子类化并重写仅用于点击手势实现的手势。它还将禁用私有的多个单击手势 UITextTapGestureRecognizer。我猜你无论如何都不想要多次点击。

override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
    if gestureRecognizer.isKind(of: UITapGestureRecognizer.self) {
        super.addGestureRecognizer(gestureRecognizer)
    }
}

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer.isKind(of: UITapGestureRecognizer.self) { return true }
    return false
}