UITextView仅响应超链接点击事件

合理的设计都千篇一律,奇葩的需求各有各的不同。

因监管要求,现在APP登录时需要让用户同意《隐私条款》《用户协议》之类的,点击界面上相应位置会去到相应详情界面。

这是一个非常常规的需求,对于大多数应用而言,使用UILabel+UIButton就完事儿了。

要考虑小屏手机换行的事情?没问题,一行绰绰有余!

那再加上本地化呢?正经设计谁考虑本地化呀?!

如此,想要使用控件自动控制内容换行,且能实现点击跳转,就只能靠UITextView超链接了。

首先,使UITextView不可编辑isEditable = false ,并且isSelectable = true,否则,UITextView将不会响应超链接点击事件。

可以通过重载canPerformAction方法来禁用菜单:

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return false
}

然后使用代理方法来禁用选中:

func textViewDidChangeSelection(_ textView: UITextView) {
    textView.selectedRange = NSRange(location: 0, length: 0)
}

但是这样仍然无法避免放大镜效果。

我们知道选中、菜单以及放大镜效果都是在长按UITextView时展示,那么直接禁用UITextView的长按手势:

override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
    if gestureRecognizer.isKind(of: UILongPressGestureRecognizer.self) {            
        gestureRecognizer.isEnabled = false
    }
    super.addGestureRecognizer(gestureRecognizer)
}

你可能感兴趣的:(UITextView仅响应超链接点击事件)