【问题标题】:Swift regular and bold font together in textview在textview中一起使用Swift常规和粗体字体
【发布时间】:2020-11-04 14:32:16
【问题描述】:

我正在尝试在 textview 中同时使用常规字体和粗体字体。当用户键入时,用户可以键入常规字体或(有一个写粗体的按钮)用户可以点击一个按钮来键入粗体。用户如何在同一个文本视图中输入常规和粗体字体?我可以使用哪种方法?

这就是我想要的:

这是我的代码:

func textViewDidChangeSelection(_ textView: UITextView) {
    
    var partOne = NSMutableAttributedString()
    var partTwo = NSMutableAttributedString()
    
    let boldFontAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.black, .font: UIFont.boldSystemFont(ofSize: 17)]
    let normalFontAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.darkGray, .font: UIFont.systemFont(ofSize: 15)]
    let combination = NSMutableAttributedString()
    
    if boldButtonTap == false {
        partOne = NSMutableAttributedString(string: textView.text, attributes: normalFontAttributes)  
    } else {
        partTwo = NSMutableAttributedString(string: textView.text, attributes: boldFontAttributes)    
    }
    combination.append(partOne)
    combination.append(partTwo)
    textView.attributedText = combination
}

【问题讨论】:

  • 如果您在尝试同时将其设置为粗体和斜体时遇到此问题。顺便说一句,这不是代码编写服务。你应该表现出一些最小的努力,否则看起来你是在要求我们做你的功课。请编辑您的问题,展示您尝试过的内容以及您面临的问题。

标签: swift fonts uitextfield uitextview


【解决方案1】:

您需要使用文本字段的attributedText 属性将其内容设置为样式文本。 (attributedText 属性采用 NSAttributedString 类型的值 创建一个允许用户将样式应用于文本视图内容的文本编辑器是一项艰巨的任务,超出了 SO 答案的范围。

(请注意,UITextField 还具有 typingAttributes 之类的属性,可让您更改用于输入新文本的属性。如果用户在输入新文本之前将字体设置为粗体,则可以使用它。)

【讨论】:

  • 谢谢邓肯的解释。如何更改用于输入新文本的属性?
  • 通过设置typingAttributes,如上所述。
【解决方案2】:
var normalText = "normal text" 
var boldText  = "bold text" 
var attributedString = NSMutableAttributedString(string:normalText)
let textField = UITextField()

var attrs = [NSAttributedString.Key.font : UIFontDescriptor.SymbolicTraits.contains(.traitBold)]
var boldString = NSMutableAttributedString(string: boldText, attributes:attrs)

attributedString.append(boldString)

// for normal text
textField.text = normalText
// for normal text with bold
textField.attributedText = attributedString

【讨论】:

  • 即使认为结果很接近所要求的内容,您也应该使用SymbolicTraits .traitBold 设置字体,而不仅仅是使用粗体系统字体。
  • 你检查你的代码了吗?它看起来不像 contains 返回字体
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2021-08-06
相关资源
最近更新 更多