在textview中一起使用Swift常规和粗体字体

Posted

技术标签:

【中文标题】在textview中一起使用Swift常规和粗体字体【英文标题】:Swift regular and bold font together in textview 【发布时间】: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

【问题讨论】:

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

以上是关于在textview中一起使用Swift常规和粗体字体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中以粗体字体在 UITableView 页脚中选择单词?

带有字体名称和粗体的 UITextView 格式

Windows 中锯齿状的谷歌字体和粗体的外来字符

使用 Google Fonts Roboto 的字体粗细,正常 (400) 和粗体 (700) 有效,浅色 (300) 无效

markdown #3斜体和粗体

IOS:字符串强调和粗体