多行UILabel,带有多个按钮和字体

时间:2016-04-30 09:42:00

标签: ios swift uitableview autolayout uilabel

我为某些活动Feed对象制作了UITableViewCell,让您知道他们将会像在一个帖子中有多个链接的Facebook帖子一样。

在我的情况下,每个帖子会有两个指向其他UIViewController的链接和一个连接这两个帖子的简单UILabel并解释连接(例如&#34; < em> X 评论 Y 的帖子&#34;)您可以点击X和Y要发生的行动。

现在,我刚刚制作了3个单独的UILabel个。问题在于,我不确定如何处理多行中太长的名称。

例如,如果代替X,帖子是&#34; XXXXXXXXXXXXXXXXX 评论 Y &#39 ;帖子&#34;,然后&#34; 评论了 Y 的帖子&#34;需要另外一行。

现在我只是将3个UILabel与约束相关联,以便它们彼此相邻,但是当它们太长时,它们就无法工作。

如果您对如何处理此问题有任何疑问,如果您能告诉我,我们将非常感激。

提前致谢。

2 个答案:

答案 0 :(得分:1)

标签太多,我认为你可以使用这个扩展名:

extension NSMutableAttributedString {

   public func setAsLink(textToFind:String, linkURL:String) -> Bool {

       let foundRange = self.mutableString.rangeOfString(textToFind)
       if foundRange.location != NSNotFound {
           self.addAttribute(NSLinkAttributeName, value: linkURL, range: foundRange)
           return true
       }
       return false
   }
}

然后你可以这样做:

let labelFont = UIFont(name: "HelveticaNeue-Bold", size: 18)
let attributes :[String:AnyObject] = [NSFontAttributeName : labelFont!]
let attrString = NSAttributedString(string:"foo www.google.com", attributes: attributes)
let urlPath: String = "http://www.google.com"
let url: NSURL = NSURL(string: urlPath)!
attrString.setAsLink("www.google.com", linkURL:url) 
myLabel.attributedText = attrString

更新 :(发表评论后)

如果您需要截取urllink,可以将标签转换为textView(UITextView),将其设置为委托并处理shouldInteractWithURL方法:

class ViewController: UIViewController, UITextViewDelegate { 
... // on your code do:
    myTextView.delegate = self
...
func textView(textView: UITextView!, shouldInteractWithURL URL: NSURL!, inRange characterRange: NSRange) -> Bool {

   if URL.scheme == "http://www.google.com" {
      //do whatever you want
      launchMyMethodForThisUrl()
   }

}

答案 1 :(得分:0)

将标签行数设置为zero,例如

 label.numberOfLines = 0     // it will increase line when needed

并使用属性字符串来表示不同的字体和大小或链接等。

然后将该字符串设置为标签为

    label.attributedText = attributedString

更新:

如果您想要针对特定​​文字执行某些操作事件,则应使用UITextview而不是标签。通过实施shouldInteractWithURL代表会更容易。

另一个好的解决方案是使用像TTTAttributedLabel这样的第三方库。这是你想要的我想的。看看一次。

更新2:

请参考this linkthis link获取所需的输出

希望这会有所帮助:)