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