首页 > 解决方案 > NSTextView:复制列表项不包括粘贴时的列表格式

问题描述

我有一个带有股票的基本 Mac 应用程序NSTextView(Interface Builder 中的“富文档内容文本视图”),但我也在 TextEdit 中观察到了这种行为:

  1. 创建一个包含 3 个项目的新项目符号列表
  2. 选择并复制单个列表项
  3. 将列表项粘贴到同一文档中

→ 粘贴的项目失去了它的列表格式,即当我最后按回车时,不会自动添加新的列表项目。

→ 当我选择两个或更多列表项时,它可以正常工作。

这是一个快速视频:

NSTextView 粘贴列表项

其他意见

我在 Scrivener 中测试了相同的过程(我相信它也使用 NSTextView),在这里复制单个列表项会将正确的格式列表属性放在剪贴板上。

我检查了剪贴板,当我复制单个列表项时,确实,与 Scrivener 相比,RTF 内容有所不同。

NSTextView(复制一项)

\f0\fs36 \cf0   \'95    Regular list item}

Scrivener(复制一项)

\f0\fs32 \cf0 {\listtext    \uc0\u8226  }Regular list item}

请注意 Scrivener 如何在剪贴板上放置正确的格式。

NSTextView(复制了两项)

\f0\fs36 \cf0 {\listtext    \uc0\u8226  }Regular list item\
{\listtext  \uc0\u8226  }Another list item}

复制两个列表项时,它按预期工作。

我错过了什么?或者这是一个错误/功能,并且 Scrivener 人员正在他们的应用程序中解决这个问题(例如,检测何时复制单个列表项并修复其属性)?

标签: cocoacopy-pastensattributedstringnstextviewnstextstorage

解决方案


这是一个“功能”。

尝试将光标放在开头(而不是行尾)并向下拖动以选择行,复制,粘贴 - 您将在粘贴结束时获得返回,但如果您返回到末尾粘贴行并按回车键,你会发现你得到了列表格式。

“段落”的格式详细信息附加到换行符,当复制文本时,也包括选择开始的格式信息。

TextEdit的源代码可从 Apple 获得,链接版本已有几年历史,并且 Apple 的文档存档,您可能会在 Apple 提供的新“改进”文档中找到更新版本,或者失去理智;-(。如果您阅读您可以了解如何处理文本系统的这些功能/怪癖。

高温高压


推荐阅读