iOS UITextView链接检测

时间:2016-03-21 11:41:59

标签: ios uitextview datadetectortypes

我选择了检测Links的UITextView,并取消选中行为selectable and editable。它会检测带有前缀“www”或“http://”或“https:// etc”的链接,但它根本无法检测到goole.co.in。任何解决方案。

2 个答案:

答案 0 :(得分:2)

这可能不是您问题的解决方案,但我根据您的问题找到了一个奇怪的问题

例如:

    txtTest.userInteractionEnabled = true;
    txtTest.selectable = true
    txtTest.dataDetectorTypes = .Link;
    txtTest.text = "stackoverflow.com"

当我编写此代码时,它会检测textview中的链接,对于'google.co.uk','google.co.us','google.com',如果它写任何一个它们在文本中检测到链接

但正如你在问题中提到的,如果我们将文本更改为'google.co.in'它没有检测到链接,我尝试过'google.co.test'这也没有检测到链接

因此,它可能与'dataDetectorTypes'的默认链接检测模式有关,否则您的代码可能适用于其他网址

如果您有静态链接链接,可以检查是否在textview

中检测到此链接

另外,作为另一种选择,您可以尝试 UIWebView ,如果它适用于您的情况

答案 1 :(得分:0)

或者,如果Apple没有提升您的需求,请自行检查。运行UITextView的文本输出并查找特定关键字,例如'.co.in',如果它们存在,则突出显示它们(或其他)。

NSString * text = textView.text;
if ([text containsString:".co.in"]){
   //Indian domain found
}

<强>更新

您可以使用attributionStrings突出显示字符串中的特定文本:

NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:myString];
UIFont * boldFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0f];
NSDictionary * attributedDict = [NSDictionary dictionaryWithObjectsAndKeys:boldFont, NSFontAttributeName, [UIColor blueColor], NSForegroundColorAttributeName, nil];
NSRange range = [myString rangeOfString:@"www.google.co.in"];
[attributedString setAttributes:attributedDict range:range];
[myLabel setAttributedText:attributedString];

关于触摸,可以在整个UILabel上放置一个水龙头手势识别器,然后使用以下方法检测水龙头的位置:

-(void)longPressDetected:(UILongPressGestureRecognizer *)sender {
    CGPoint touchLocation = [sender locationInView:myLabel];
}

并从那里检查点按位置是否与已知的单词框重叠。

我觉得可能有更简单的方法来实现你想做的事情,但我不记得它是什么。