【问题标题】:Bold part of the text in UITextView in Swift using NSMutableAttributedString使用 NSMutableAttributedString 在 Swift 中的 UITextView 中的粗体部分文本
【发布时间】:2015-11-30 17:12:25
【问题描述】:

我正在尝试在 UITextView 中加粗部分文本。 这是我正在使用的代码(虽然我简化了文本):

@IBOutlet weak var textview: UITextView!

/*...*/

var str : NSMutableAttributedString = NSMutableAttributedString(string:"this is a test", attributes: [NSFontAttributeName:textview.font!] )
str.addAttribute(NSFontAttributeName, value: UIFont(name: "GillSans-Bold", size: 16)!, range: NSMakeRange(10, 4))
textview.attributedText = str

但是它不起作用,我不明白为什么......我见过的所有例子都使用这个。没有错误,但文本中没有任何内容以粗体显示。

对不起,如果它是重复的,我发现很多帖子都在谈论在 uitextview 中以粗体显示文本,据我所知,有些人使用了这种技术,但没有人遇到问题。有什么我错过的吗?我是不是看错了什么?

提前致谢。

【问题讨论】:

  • 如果你在第一行应用GillSans-Bold,它有效吗?
  • 记录str。它是否显示了您的期望?
  • 我无法重现该错误,它在 Playground 中 works for me
  • 确实,我刚刚在操场上也测试过它,它在那里工作,但在我的项目中没有
  • 那么你可以忘记/删除这个问题。如果有效,则有效:此代码没有错误。它在您的应用程序中不起作用的事实意味着 其他东西 阻止它起作用。您现在必须调试您的应用程序,以查找内容和位置。 :)

标签: ios swift uitextview nsmutableattributedstring


【解决方案1】:

一个原因可能是您使用的字体不存在或在代码中没有正确命名。这是显示所有可用字体列表的巧妙技巧:

//credits to Chris: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/#includefonts
func printFontFamilyNames(){

    for family: String in UIFont.familyNames()
    {
        print("\(family)")
        for names: String in UIFont.fontNamesForFamilyName(family)
        {
            print("== \(names)")
        }
    }

}

这可能无法直接回答您的问题,但我相信您会发现它很有帮助。还要检查这个代码块顶部的链接,我从中提取了这个函数。

更新

这是我写的一段代码,它正确地改变了属性字符串的字体在 UILabel 内

if let terms = self.terms {

        let text = NSMutableAttributedString(string: terms.text!)

        let textAsString = text.string as NSString
        let range = NSMakeRange(0, textAsString.length)

        textAsString.enumerateSubstringsInRange(range, options: NSStringEnumerationOptions.ByWords, usingBlock: { (substring, substringRange, enclosingRange, _) -> () in

            if  ["Create", "Account", "Terms", "of", "Service", "Privacy", "policy"].contains(substring!) {

                if let font = UIFont(name: "OpenSans-Semibold", size: 11) {

                    text.addAttribute(NSFontAttributeName, value: font, range: substringRange)

                } else {

                    Services.log("Invalid font")

                }

            }

            //...

        })

        terms.attributedText = text

    }

注意:此代码包含项目特定的类和变量,但我确信您可以提取所需的内容。

【讨论】:

  • "GillSans-Bold" 是正确的名称,这不是 OP 的错误。
  • 字体名称是正确的,我用它来做其他事情:/(你复制的代码也对我不起作用,它告诉我“不能在没有参数的情况下调用familyNames”,但该函数确实不需要参数,所以我不明白这个问题......在调用它之前我需要做些什么吗?)
  • @Lyra Armin 的代码示例有效,我刚刚在 Playground 中进行了测试。您确定您使用的是当前版本的 Xcode?​​span>
  • 很抱歉,我无法提供更多帮助,尽管反对票有点多。我用我使用的一个例子更新了我的答案,这可能会给你一个更好的见解。请注意,我使用的是标签而不是 UITextVIew。
猜你喜欢
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
相关资源
最近更新 更多