NSMutableAttributedString iOS6中的可点击URL

时间:2012-10-24 19:22:12

标签: objective-c ios ios6

我正在开发一款应用程序,以便从Twitter等远程Web服务接收消息。有时这些消息包含URL:s,我想让这些消息可点击。我想知道哪种方法最好。我尝试过NSLinkAttributeName但它不适用于iOS。是否可以创建透明按钮并将其放置在textview中正确的位置上方?我怎么能这样做?还是有更好/更简单的方法?网址的位置和长度可以变化。

3 个答案:

答案 0 :(得分:3)

有两种好方法可以解决这个问题:

<强> 1。 CoreText,或者更像是TTTAtributedLabel

的包装器

这是最强大的解决方案。它支持Datadetectortypes(尽管你最好在显示它之前自己检测性能)并且它相对受欢迎。

但是,根据您的使用情况,它可能会影响您的tableview的滚动性能。

<强> 2。动态地将按钮放在标签上方,例如IFTweetLabel

这是简单的解决方案。 IFTweetLabel基本上是UILabel的一个插件,它开箱即用。但是,如果您想要过多地定制它,最终会遇到极限。更不用说它在100%的时间里表现不佳。 YMMV。

答案 1 :(得分:2)

一种选择是使用UIDataDetectorTypeLink。请检查此link for more details.

// Create textview, centering horizontally
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 10, 320, 50)];

// Set font, background and alignment
[textView setFont:[UIFont boldSystemFontOfSize:16]];
[textView setBackgroundColor:[UIColor blackColor]];
[textView setTextAlignment:UITextAlignmentCenter];

// Unfortunately the link will show as blue even with this setting
//  [textView setTextColor:[UIColor greenColor]];

// Edit and scrolling off  
[textView setEditable:NO];
[textView setScrollEnabled:NO];

// Set data type to specify URL/link
[textView setDataDetectorTypes:UIDataDetectorTypeLink];

// Set text as URL
[textView setText:@"text.com"];  

[self.view addSubview:textView];

其他一些选项是UIWebview,代理人可以处理其中的网址。另一种选择是fancy UILabels

对于您提出的其他问题,请查看How to open a UITextView URL in UI Web View?Is there a way to create custom UIDataDetectorTypes?Change color of UITextView links with a filter?

答案 2 :(得分:0)

NSLinkAttributeName可以使用 UITextView 进行点击,但不能使用UILabel。请注意it's for iOS 7+,并且UITextView必须为Selectable(在故事板中)。

快速示范:

let attributedText = NSMutableAttributedString(string: "Hello world")
attributedText.addAttribute(.link, value: URL(string: "https://example.com")!, range: NSRange(location: 0, length: attributedText.length))
textView.attributedText = attributedText