Swift:如何在没有属性字符串的情况下在textview中显示粗体字

时间:2016-06-14 14:16:17

标签: ios swift swift2

我们正在为我们正在处理的应用添加最后润色,这显然意味着整个"条款和条件"和"常见问题解答"部分,格式,子弹,休息和所有。

所以我尝试将其复制粘贴到带有" editable"的textView中。设置为关闭,保留子弹,但不是粗体文本。

现在,我之前已经完成了属性字符串,我不得不说,我不确定在一些12页的段落,项目符号列表和中断内容上执行此操作会很容易可能会在几年内改变。

所以我的问题是,有没有办法在不使用属性字符串的情况下执行此操作?

除此之外,或许有一种循环文本的方法,并寻找一个将应用属性的书面标签?

编辑:

更新。我建议使用HTML标签和网页浏览。这就是常见问题解答(使用标签)所做的,我忽略了提到我也试过了。

出于某种原因,它只显示一个空白的文本视图,虽然是一个大文本视图,好像里面有文字(没有任何内容)。奇怪的是,复制粘贴有效,但这并不是。

这是我的代码:

override func awakeFromNib() {
    super.awakeFromNib()

    termsTitle.text = "Terms and Conditions"

    htmlContent = "<p style=\"font-family:Helvetica Neue\"><br/><strong><br/> BLA BLA BLA BLA BLA BLA x 12 Pages"

    do {
        let str = try NSAttributedString(data: htmlContent.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)
        termsTextView.attributedText = str
    } catch {
        print("Dim background error")
    }
}

2 个答案:

答案 0 :(得分:1)

我很确定如果不使用AttributedString就无法在Textview中执行此操作。一种可能的解决方案是使用WebView。转换您的&#34;条款和条件&#34;和&#34;常见问题&#34;使用HTML可能比使用AttributedString更容易。

答案 1 :(得分:1)

如果您仍想在UITextView中使用HTML,可以尝试以下功能:

func getAttributedString(fileName: String) -> NSAttributedString? {
   if let htmlLocation = NSBundle.mainBundle().URLForResource(fileName, withExtension: "html"), data = NSData(contentsOfURL: htmlLocation) {
      do {
         let attrString = try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes: nil)
         return attrString
      } catch let err as NSError {
         print("Attributed String Creation Error")
         print(err.localizedDescription)
         return nil
      }
   } else {
      return nil
   }
}

此功能假设您的主包中有.html个文件。你传递文件的名称(减去扩展名)(应该在你的项目中),然后像这样使用它:

textView.attributedText =  getAttributedString("TermsAndConditions")

为了澄清,在此示例中,textView在视图控制器上是@IBOutlet

如果.html文件不存在或NSAttributedString转换失败,则此函数返回nil。