UITextView的数据检测类型无法检测http://t.co/链接?

4
    theTweet = [[[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)] autorelease];
    theTweet.text = [[tweets objectAtIndex:index] objectForKey:@"text"];
    theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
    [tweetView addSubview:theTweet];

[[tweets objectAtIndex:index] objectForKey:@"text"];

这段代码包含一个链接,链接地址为http://t.co/######,但似乎UITextView无法识别http://t.co链接。我是否需要使用UIWebView来代替?


你是否忘记了 theTweet.dataDetectorTypes = UIDataDetectorTypeLink;? - 0x8badf00d
已经在了。还是不起作用。 - ninjaneer
4个回答

11

我注意到的一件事是,为了使UITextView识别链接,您需要将 selectable设置为YES。例如:

self.bodyTextView = [[UITextView alloc]initWithFrame:myFrame];
[self.bodyTextView setEditable:NO];
//this is the key
[self.bodyTextView setSelectable:YES];
[self.bodyTextView setDataDetectorTypes:UIDataDetectorTypeLink];
[self.bodyTextView setAttributedText:myAttributedText];

有没有可能的方法...我们可以保持数据检测器开启但是可选关闭吗?在我的当前代码中,我不想允许用户选择文本,但希望检测链接并允许点击它们。 - Mehul Thakkar
开箱即用,我不这么认为,但是这里有一个讨论此类问题的答案:https://dev59.com/yloV5IYBdhLWcg3weevH - Brian Sachetta

3

请问您是否设置了以下代码:theTweet.dataDetectorTypes = UIDataDetectorTypeLink;

现在,您可以尝试以下代码:

    UITextView *theTweet;
theTweet = [[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)];
theTweet.text = @"http://t.co/######";
theTweet.editable = NO;
theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
[myview addSubview:theTweet];

它在我这里可以正常工作。

错误一定在别的地方。(你关闭了可编辑吗?)


是的,我忘了在原帖中添加那个。还是不起作用。 - ninjaneer
下次构建时将会进行双重检查。 - ninjaneer
确保你在设备上进行测试,而不是在模拟器上。 - Henning
@Henning 这在模拟器中不起作用吗?还是这只是一个关于不信任你的模拟器的一般评论? - Chris Stephens

0
也许制作一个扩展会很有用,这样我们就不必去记忆它了...
@implementation UITextView (Extension)

- (instancetype)dataDetector :(UIDataDetectorTypes)types {
    self.dataDetectorTypes = types;
    if (types != UIDataDetectorTypeNone) self.selectable = true;
    return self;
}

@end

0

你需要将可编辑属性设置为NO

theTweet = [[[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)] autorelease];
theTweet.editable = NO; //add this line
theTweet.text = [[tweets objectAtIndex:index] objectForKey:@"text"];
theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
[tweetView addSubview:theTweet];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接