问题标签 [nstextstorage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
38 浏览

objective-c - 临时 NSTextView 调用自定义 NSColor 子类,在后台线程调用 UI

我正在后台线程中测量文本块的高度。出于某种原因,如果在应用程序刚刚启动时发生这种情况,线程会调用DynamicColor需要在主线程中调用的 NSColor 子类,因为它会检查应用程序是否处于暗模式。

后台线程正在运行的类不应该对 有任何引用DynamicColor,但是,当NSTextStorage分配 时,会调用 DynamicColor。它会导致从后台任务进行 UI 调用时出错。

我不知道如何NSTextStorage调用它不知道存在的某个类。只有我的NSDocument子类引用了它,其他类都不应该不知道它。

调用后台线程NSDocument

后台线程遍历包含字符串数据的大量元素并计算它们的高度。

调用DynamicColor发生在NSTextStorage分配时。通过检查我们是否在 中的主线程上,我能够避免崩溃DynamicColor,但我担心错误的原因。

DynamicColor是一个NSColor子类。以下是相关部分:

我尝试将纯色设置NSColorNSTextContainer前景色,但没有帮助。每次运行应用程序时都不会出现该错误,并且在测试环境中我无法重现该问题。此外,这只是一次分配文本容器时发生这种情况。

0 投票
1 回答
103 浏览

ios - NSLayoutManager numberOfGlyphs 总是显示 0,Swift

我正在尝试在每个页面上使用所需的属性文本创建带有 UITextView 的多页 PDF。但是,一旦应用程序被存档并通过 TestFlight 分发以进行测试,当我遇到问题时。

下面是我用来生成多页的示例代码,

如果在从 Xcode 构建时在模拟器或设备上运行,这非常有效,但是一旦应用程序分发,layoutManager.numberOfGlyphs即使我 print() 它显示的布局管理器,它也总是返回 0,

我是否错过了一些愚蠢的事情,或者是否有我不知道的错误?我一生都无法理解为什么它不起作用!

感谢可以给予的任何帮助。

0 投票
1 回答
91 浏览

macos - 如何在 NSTextInputClient 中检查输入法的状态?

从文档中,我可以看到输入上下文会将以下方法之一发送到文本视图。

  • insertText:replacementRange:
  • setMarkedText:selectedRange:replacementRange:
  • doCommandBySelector:

在我的测试用例中,当启用输入法时,keyDown可以触发setMarkedText:selectedRange:replacementRange,但是如果我一直删除markedText到最后一个字符,那么输入法将被停用而不会触发上述任何方法。

是否有类似停用的钩子,以便在输入法停用后我可以立即执行某些操作?

0 投票
1 回答
109 浏览

swift - 如何更改 NSTextStorage 中仅未来文本的属性?

再会,

我想知道如何更改 NSTextStorage 中仅未来文本的属性,设置 textStorage 的属性会更改文本存储中的所有文本而不是未来文本。如果有人可以帮助我。将不胜感激。

谢谢

0 投票
1 回答
159 浏览

uitextview - 如何在 UITextView 中复制 GitHub 的应用代码块样式?

我正在尝试创建一个 Markdown 编辑器,因为我对学习 TextKit 很感兴趣。我只在 iOS 设备上工作,所以我只有 UIKit 框架可供我使用,我还观看了这个WWDC18 视频,它解释了使用 TextKit 采用的一些最佳实践。起初,我真的很想知道如何获得与视频在 22:13 显示的相同结果。

视频中开发人员显示的代码使用AppKit并通过将代码部分替换为 a并为后者NSMutableParagraphStyle提供自定义来将代码包装在该矩形中。NSTextBlock你可以猜到,我不能继承NSTextBlockUIKit因此我不能复制所示的例子。

不过,我有一些更难问的问题,我真正想要复制的是 GitHub 应用程序代码块样式,这是我想要复制的最终结果:

在此处输入图像描述

如您所见,它应该有一个带有自定义背景颜色的圆角矩形,并且它需要可滚动以使代码尽可能多地扩展(我对语法突出显示不感兴趣)。

NSTextBlock如果在 中不可用,我该如何实现这样的目标UIKit

目前我所做的只是覆盖NSTextStorage以使用 custom 为代码部分设置正确的字体NSAttributedString

0 投票
0 回答
99 浏览

ios - 从剪贴板粘贴文本时自定义 NSTextStorage 崩溃

我试图继承 NSTextStorage。现在,我只关注文档,覆盖原语:

起初,一切正常。但是,当我尝试使用自定义的 TextStorage 将长文本(大约 9000 个字符)粘贴到 UITextView 时,我的应用程序崩溃了:

我不认为 10k 对于 TextView 来说太大了,如果我使用默认的文本存储,它就可以正常工作。但我找不到问题出在哪里。

我尝试使用 Objective-C 而不是 Swift 来编写我的 TextStorage,但问题仍然存在:

尝试添加beginEditing()endEditing()喜欢这样,但它没有任何不同:

我发现崩溃是在 and 之后发生的replaceCharacters(in:with:)setAttributes(_:range:)processEditing()调用下。但我没有覆盖processEditing().

0 投票
1 回答
103 浏览

ios - 如何切换 UIFont 的粗体和斜体

我正在尝试使用 textKit 快速将粗体和斜体应用于 UITextView 中的选定文本。

这是代码:

我想要实现的是

  • 将所选文本更改为粗体或斜体
  • 将选定的粗体文本更改为斜体,反之亦然

现在发生的情况是,当我选择文本并将其更改为粗体时,它会更改为粗体,但是当我尝试将另一个文本更改为斜体时,它也会更改为粗体,我仍然无法从粗体切换为斜体。

0 投票
0 回答
20 浏览

swift - 在 NSTextStorage 中换行时 UITextView 中的插入符号移动

在更改 NSTextStorage.replaceCharacters 中的文本时,我无法弄清楚如何正确更改 selectedTextRange。在原型上:我想打印“12”而不是任何输入符号并将光标移动到正确的位置,就好像我输入了“12”一样。这是我的代码:

它有效,但光标始终停留在中间(好像我输入了 1 个字符,而第二个字符刚刚插入光标之后):

例子

请告诉我怎么做对吗?

0 投票
1 回答
75 浏览

swift - 带有自定义 NSTextStorage 的可滚动 NSTextView 用于格式化

我正在尝试为 Mac OS 制作带有格式的文本编辑器。我一直在使用NSTextView一个自定义NSTextStorage类。它将粗体等属性应用于NSAttributableStrings.

这一切似乎都很好,如下面的屏幕截图所示。这是一个附加NSTextView的自定义NSTextStorage类。它通过属性应用格式NSAttributeableString

NSTextView 没有滚动和自定义 TextStorage 用于格式化

然而,一切都一样,但是从 Apple 提供的函数中获取一个可滚动的 NSTextView ,NSTextView.scrollableTextView()它根本不显示任何文本。即使您可以在屏幕截图中看到NStextView它实际上是可见的。此外,将鼠标移到编辑器上会将光标更改为编辑器光标。但我不能选择、输入或做任何事情。

带有客户 NSTextStorage 的可滚动文本视图,不显示任何内容

做与上面完全相同的事情,但不向文本视图提供文本容器确实表明它已正确连接,因为我确实得到了一个可滚动的文本视图。滚动实际起作用的地方,但当然不再应用格式。

NSTextView 滚动工作,但不应用格式

所以我很困惑我现在必须做什么。

这基本上是我的设置: