单击时 UITextView 未打开 URL

Posted

技术标签:

【中文标题】单击时 UITextView 未打开 URL【英文标题】:UITextView Not Opening URL When Clicked 【发布时间】:2015-08-21 18:17:41 【问题描述】:

我有一个UITextView,里面有一个属性字符串,其中包含一个 URL。属性字符串正在转换为链接,但是当您按下链接时会出现错误:

结果的未知 DDResult 类别 1;找不到 URL www.myurl.com 的任何操作

这是我的代码:

NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:NSLocalizedString(@"My Text", nil)];
NSRange range = [str.mutableString rangeOfString:@"www.myurl.com" options:NSCaseInsensitiveSearch];

if (range.location != NSNotFound) 
    [str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"CourierPrime-Bold" size:15] range:NSMakeRange(0, range.location)];
    [str addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"www.myurl.com"] range:range];
    [str addAttribute:NSForegroundColorAttributeName value:[UIColor brownColor] range:range];



self.welcomeText.editable = NO; 
self.welcomeText.attributedText = str;

//As a note, I have tried this with the value 0 and UIDataDetectorTypeLink
//and neither option worked.
self.welcomeText.dataDetectorTypes = UIDataDetectorTypeAll;

我使用的是XIB,在行为选项中我启用了selectable,在检测选项中我选择了links

如果可能,我希望在手机的移动浏览器中打开链接,而不是创建 web 视图。

【问题讨论】:

【参考方案1】:

URL 需要一个方案。

这个:

[str addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"www.myurl.com"] range:range];

需要:

[str addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://www.myurl.com"] range:range];

【讨论】:

非常感谢!完美运行。 这不适用于UITextView自动检测到Link Attribute,并且输入是基于用户的场景。 @ClausJørgensen 但这不是问题所在。答案对于原始问题是正确的。如果您有此处未涵盖的其他情况,请使用您自己的具体详细信息发布您自己的问题。无需对一个从未打算解决您自己的具体情况的答案投反对票。【参考方案2】:

Swift 中:

网址需要安全 (https)

ios 不允许您将用户重定向到非安全链接,因此请提供带有 https 的链接

并使用 Swift 使UITextView 中的特定字符串可点击

你可以这样做:

let link = "https://www.google.com"
let range = (text as NSString).range(of: link)
attribute.addAttributes([NSAttributedStringKey.link: link], range: range)

【讨论】:

以上是关于单击时 UITextView 未打开 URL的主要内容,如果未能解决你的问题,请参考以下文章

单击另一个 UITextView 时结束编辑

单击时未打开模态表单

在 ios 8 中的 UITextview 中单击时,键盘不会弹出但在 ios 7 中运行良好

在 UITextView 上点击时未调用 UICollectionView didSelectItemAtIndexPath

单击按钮时引导下拉菜单未打开

单击 recyclerView 项目时未打开新片段