gpt4 book ai didi

cocoa - 在 NSTextView 中将选定的文本设为粗体

转载 作者:行者123 更新时间:2023-12-03 16:58:22 25 4
gpt4 key购买 nike

我使用以下代码将 NSTextView 中的选定文本设为粗体

  [self.textView.attributedString addAttribute:NSFontAttributeName value:[NSFont boldSystemFontOfSize:12] range:self.textView.selectedRange];

其中 self.textView 是 NSTextView 的导出。 Xcode 发出警告,指出 addAttribute 可能无法工作,因为该属性的类型为 NSAttributedString 而不是 NSMutableAttributedString。代码可以工作,但这样做是错误的吗?如果是这样,正确的方法是什么?

更新:
我找到了另一种方法:

NSMutableAttributedString *textFieldText = [self.textView.attributedString mutableCopy];
[textFieldText addAttribute:NSFontAttributeName value:[NSFont boldSystemFontOfSize:12] range:self.textView.selectedRange];
[self.textView.textStorage setAttributedString:textFieldText];

既然这两种方法都有效,我想知道哪种方法更好。

最佳答案

一般说明

照其字面意思理解类公开的接口(interface)。假设返回类型是声明的返回类型的特定子类并不是最佳实践。

这在类集群的上下文中尤其重要:公共(public)接口(interface)的不同实现对于同一方法可能有不同的返回类型,尽管这些返回类型保证与 header 中声明的类型兼容。

假设您可以保证类簇中的所有未记录的子类当前返回 header 中声明的类型的相同特定子类,则不能保证在 Apple 框架的 future 修订版中仍然会出现这种情况。

NSTextView

问题是关于 NSTextView 及其属性 textStorage。该属性的类型为 NSTextStorage,是“NSMutableAttributedString 的半具体子类”。 documentation继续,描述更改 NSTextStorage 或其属性存储的字符串的首选机制:

use the text access methods defined by NSMutableAttributedString, NSAttributedString, NSMutableString, and NSString to perform character-level manipulation.

NSTextView 公开其属性 textStorage,它是 NSTextStorage 的实例。 NSTextStorageNSMutableAttributedString 的子类。因此,我们可以简单地向其添加我们的属性:

[self.textView.textStorage addAttribute:NSFontAttributeName
value:[NSFont boldSystemFontOfSize:12.0f]
range:self.textView.selectedRange];

关于cocoa - 在 NSTextView 中将选定的文本设为粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com