You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改NSTextView中全部文本的颜色?代码问题咨询

解决NSTextView追加文本颜色不统一的问题

这问题我做Mac开发时也踩过类似的坑,咱们一步步拆解原因和解决方案:

为什么只有"Hello"变色,"World"不变?

你设置的myTextView.textColor = .white,其实是给textView的默认输入属性(也就是typingAttributes)添加了文字颜色。用string = "Hello"设置初始文本时,textView会自动把这个默认颜色应用上去;但直接操作textStorage?.append(NSAttributedString(string: "World"))时,你追加的是一个没有任何属性的纯字符串,它不会自动继承textView的textColor,所以会用系统默认的黑色显示。

解决方案:两种方式实现自动继承颜色

方式一:用textView的insertText:方法追加(推荐)

这个方法会自动使用textView当前的typingAttributes(包含你设置的白色),不用手动处理属性:

override func viewDidLoad() { 
    super.viewDidLoad() 
    myTextView.string = "Hello" 
    myTextView.backgroundColor = .black 
    myTextView.textColor = .white 
    // 改用insertText,自动继承textColor
    myTextView.insertText("World")
}

方式二:基于textView的默认属性创建富文本再追加

如果你一定要直接操作textStorage,可以先获取textView的typingAttributes,用它来创建带属性的字符串,这样就不用每次手动写颜色了:

override func viewDidLoad() { 
    super.viewDidLoad() 
    myTextView.string = "Hello" 
    myTextView.backgroundColor = .black 
    myTextView.textColor = .white 
    // 获取当前的默认输入属性(包含textColor)
    let defaultAttrs = myTextView.typingAttributes
    let attrString = NSAttributedString(string: "World", attributes: defaultAttrs)
    myTextView.textStorage?.append(attrString)
}

关于追加文本方式的小建议

直接操作textStorage本身是没问题的,它是NSTextView管理富文本的核心对象,但要注意:如果追加的是无属性的纯字符串,会使用系统默认样式。如果想让后续追加的文本都自动继承当前textView的样式,优先用insertText:方法,或者基于typingAttributes创建富文本,这样就不用每次手动指定颜色啦。

内容的提问来源于stack exchange,提问作者vincentf

火山引擎 最新活动