swift2 Swift:如何在文本视图中显示粗体字而不使用属性化字符串

uujelgoq  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(172)

我们正在为我们正在开发的应用程序添加最后的润色,这显然意味着要添加一个完整的“条款和条件”和“常见问题解答”部分,包括格式、项目符号、休息时间等等。
所以我试着把它复制粘贴到一个textView中,把“editable”设置为off,这样就保留了项目符号,但不保留粗体文本。
现在,我以前做过属性化字符串,我不得不说,我不确定在一些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")
    }
}
sbdsn5lh

sbdsn5lh1#

我敢肯定,如果不使用AttributedString,你就无法在文本视图中实现这一点。一个可能的解决方案是使用WebView。将“条款和条件”和“常见问题解答”转换为HTML可能比使用AttributedString要容易得多。

dsekswqp

dsekswqp2#

如果您仍想在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。

相关问题