iOS 7中的UITextView链接检测

Tob*_*ias 59 objective-c uitextview ios ios6 ios7

我有一个UITextView通过Interface Builder管理的.作为数据检测,我检查了"链接".在iOS 6中,一切正常,链接突出显示且可点击.但是在iOS 7中,所有链接仍然只是纯文本.未选中可编辑和可选择的复选框.

可能引起关注的是,UITextView容器视图的子视图再次位于a UIScrollView.

Tob*_*ias 69

似乎在iOS 7中,链接检测仅在UITextView可选时才有效.因此,使我的UITextView不可选择停止链接检测工作.

我也在iOS 6中对此进行了测试,我可以确认在iOS 6中链接检测即使在UITextView不可选择的情况下也能正常工作.


The*_*son 32

我今天在电话号码检测方面遇到了一些问题.在我将文本设置为其他内容之后,似乎UITextView会保留旧的电话号码并保持文本突出显示.

我发现如果在将文本设置为新字符串之前将setText:nil设置为nil,则会重置textview,并且电话号码将正常突出显示.我想知道这是否是iOS 7.0中UITextView的某种错误

无论哪种方式,这确实对我有用.

  • 感谢您的回复,但不幸的是,这并没有成功. (4认同)
  • 具有讽刺意味的是,我在另一个正在构建的应用程序中再次遇到此问题 将textview设置为可编辑,然后立即将其取消设置为editable,在prepareForReuse方法中似乎比将文本设置为nil更好. (3认同)
  • 既没有将textView设置为nil也没有将editable打开和关闭切换似乎对我有用. (3认同)

Rac*_*eur 27

当iOS7第一次出现时,这困扰了我,我在这个线程中找到了答案(在设置实际值之前将UITextView的text属性设置为nil).然后突然,问题(对我而言,整个字符串被突出显示为链接)被重新裁剪(假设是由于iOS更新).

对我来说最终的诀窍是停止使用text属性并设置attributedText.一旦我这样做,需要设置字体/滚动/可选/可编辑/等.以编程方式,消失了.我在IB中定义了我的UITextView,设置了我想要的值(不可滚动,不可编辑,可选,检测链接和电话号码),然后构建了一个属性字符串并设置:

myUITextView.attributedString = myAttributedString;
Run Code Online (Sandbox Code Playgroud)

突然一切都按预期工作了.希望这可以帮助其他人.

  • 这是唯一对我有用的解决方案.从7.0.4开始,其他解决方案似乎都不再起作用了. (2认同)

sva*_*all 18

我遇到了同样的问题,并且在UITextView上禁用滚动会激活加载时的链接检测,而不是仅在用户与textview交互后才开始工作.UITextView也必须是可选择的且不可编辑的.

detailTextView.scrollEnabled = NO;
detailTextView.editable = NO;
detailTextView.selectable = YES;
Run Code Online (Sandbox Code Playgroud)

在iOS6上不需要可选择或启用滚动.

要检查的另一件事是在单元格的单元格和内容视图上启用了用户交互,否则链接将无法单击.

  • 滚动提示非常感谢!要获得完整修复,请将其与text = nil结合使用,它可以正常工作! (3认同)

Har*_*hak 15

检查这些行必须添加使用的数据检测器性能textviewUItableView细胞.

    txtvwMsgText.userInteractionEnabled = YES;
    txtvwMsgText.dataDetectorTypes = UIDataDetectorTypeLink;
    txtvwMsgText.scrollEnabled = NO;
    txtvwMsgText.editable = NO;
    txtvwMsgText.selectable = YES;
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 8

你应该看看NSDataDetector.

您可以使用它来查找和处理不同的数据(链接,电话号码等).看看这个网站:

http://nshipster.com/nsdatadetector/

您还可以使用dataDetectorTypes属性UITextView来设置要在代码中检测的内容.可能只是你的故事板过渡问题.

textView.dataDetectorTypes = UIDataDetectorTypeLink;
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答,但在iOS 6中,UITextView无需额外编码即可完成此操作(在IB中设置了正确的探测器).那为什么在iOS 7中不再有效? (4认同)

Ale*_*der 7

请注意,如果不可编辑,您的textview将仅识别链接!

这是一个很好的教程,如何editable UITextView使用`link detection``

带链接检测的可编辑UITextView

从现在开始,我没有遇到任何问题.

诀窍是GestureRecognizer转发触摸并启用/禁用编辑.

您可以对selectable / not selectable问题应用相同的内容iOS7


Jak*_*par 6

经过几次测试,我找到了解决方案.

如果您希望链接处于活动状态且未启用选择,则需要编辑gestureRecognizers.

例如 - 有3个LongPressGestureRecognizers.一个用于单击链接(minimumPressDuration = 0.12),第二个用于放大可编辑模式(minimumPressDuration = 0.5),第三个用于选择(minimumPressDuration = 0.8).此解决方案删除LongPressGestureRecognizer以进行选择,其次用于缩放编辑模式.

NSArray *textViewGestureRecognizers = self.captionTextView.gestureRecognizers;
NSMutableArray *mutableArrayOfGestureRecognizers = [[NSMutableArray alloc] init];
for (UIGestureRecognizer *gestureRecognizer in textViewGestureRecognizers) {
    if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
        [mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
    } else {
        UILongPressGestureRecognizer *longPressGestureRecognizer = (UILongPressGestureRecognizer *)gestureRecognizer;
        if (longPressGestureRecognizer.minimumPressDuration < 0.3) {
            [mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
        }
    }
}
self.captionTextView.gestureRecognizers = mutableArrayOfGestureRecognizers;
Run Code Online (Sandbox Code Playgroud)

在iOS 9上测试过,但它应该适用于所有版本(iOS 7,8,9).我希望它有所帮助!:)