问题标签 [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 投票
1 回答
498 浏览

ios - uilabel 中的阿拉伯文和英文字符

我用:

用于确定触摸我在 UILabel 中的属性文本中的某些链接。如果我在字符串中只使用英文字符,一切都很好——我接触到的字符可以精确地确定。但是,如果我尝试将阿拉伯语和英语结合在一个标签中,就像在屏幕上一样在此处输入图像描述

并尝试触摸 aljaml.com 我得到 amnesty.com 的范围。我应该怎么办?

0 投票
2 回答
701 浏览

macos - NSTextStorageDelegate 的 textStorage(_,willProcessEditing:,range:,changeInLength:) 移动选择

我正在尝试实现一个语法着色文本编辑器,它还可以为您在新行的开头插入空格,或者用文本附件替换文本。

在先前的实现遇到撤消问题后再次仔细阅读文档后,似乎推荐的瓶颈是 NSTextStorageDelegate 的 textStorage(_,willProcessEditing:,range:,changeInLength:) 方法(它指出Delegates can change the characters or attributes.,而didProcessEditing说我只能更改属性)。这很好用,除了每当我实际更改属性或文本时,文本插入标记都会移动到我修改的任何文本范围的末尾(因此,如果我更改整行的样式,光标会移到行尾)。

有谁知道我错过了哪些额外的电话告诉 NSTextStorage/NSTextView 不要搞砸插入标记?此外,一旦我插入文本,我可能必须告诉它移动插入标记以说明我插入的文本。

注意:我已经看到修改 NSTextStorage 会导致插入点移动到行尾,但这假设我是 NSTextStorage 的子类,所以我不能在那里使用该解决方案(并且宁愿不子类 NSTextStorage,因为它是一个半-抽象子类,如果我将其子类化,我会失去苹果类的某些行为)。

0 投票
1 回答
405 浏览

ios - 如何将自定义 NSTextStorage 设置为从情节提要创建的 UITextView 对象?

我想为从情节提要创建NSTextStorage的对象设置自定义。UITextView如果真的需要,我可以考虑将UITextView.

(我知道如果我UITextView从代码中创建了一个对象,我将能够使用init(frame: CGRect, textContainer: NSTextContainer?)构造函数。)

斯威夫特更可取。

0 投票
1 回答
194 浏览

swift - 按下键盘中的返回键时,UITextView 不记得字体样式

我在情节提要中有一个 UITextView (属性文本属性,并选中允许编辑属性,选中,可编辑)。当用户按下按钮时,我想“激活”粗体字体。因此,无论用户从那里输入什么,都必须以粗体显示。当按下返回键时,我想转到下一行,UITextView 应该记住所有文本的属性。问题是按回车键后,所有字符都变为粗体。

这是我在代码中的内容。

我试图实现的另一个例子是 stackoverflow 编辑效果。当我按下“{}”图标时,我处于“可编码模式”。当在键盘中按下 enter 时,它会恢复正常。

regularText 和 boldText 属性只是大小为 14 的系统字体。

0 投票
0 回答
480 浏览

ios - 在 UILabel 中一一打印属性字符串字符

我有一个自定义的 UILabel 类,它允许我将 tapGestureRecognizers 附加到字符串的特定部分。现在,我正在尝试为 UILabel 的文本设置动画,以一次打印一个字符。我的代码似乎一次向 TextStorage 添加一个字符,但文本同时显示,没有动画。一次向 TextStorage 添加一个字符是错误的方法吗?谢谢

0 投票
0 回答
94 浏览

macos - 有没有办法用 NSLayoutManager 过滤掉某些范围?

我们有一个NSTextView可能包含大量文本的内容。我正在使用它来替换NSTableView,它在生成数千行时太慢了。我们还有一个NSSearchField,它用于将其谓词应用于表的数组控制器,以将其缩小到仅包含给定字符串的行。现在我想对文本视图做同样的事情。

我尝试将自定义属性应用到 中找到的范围NSTextStorage,然后使用该NSLayoutManagerDelegate方法-layoutManager:shouldGenerateGlyphs:properties:characterIndexes:font:forGlyphRange:将未标记范围的字形属性设置为NSGlyphPropertyNull. 这导致了许多错误:

它使该应用程序陷入困境。有没有更好的方法来过滤 textStorage 的显示并只绘制我们找到的段落?

目前,它必须在 10.10 上运行。呜呜。

0 投票
1 回答
623 浏览

swift - Swift 4:将数据从一个 NSViewController 传递到另一个的问题

在 macOS 应用程序中,我试图弹出一个表单,用户可以在其中输入文本。一旦用户添加了文本,他们点击保存关闭工作表并将文本添加到以前的页面 NSTextView。我已经尝试了很多变体,但老实说,我什至不确定如何在两个 ViewController 之间传递数据。我试过 PerformSegue,它似乎只是 iOS。我也尝试保存到 UserDefaults().string(forKey:"") 但似乎没有任何效果。最后,我遇到了一种方法来引用另一个 ViewController 类,然后从该类运行一个函数,但它似乎不起作用。这是我到目前为止的代码(如果缺少某些内容,我会尝试添加所有相关代码,让我知道)。

这是连接到要添加文本的视图的 ViewContoller。

这是我试图获取用户文本的 ViewController。

我可以在 saveNotesTemplate 中运行 print(notesTemplate!),它显示来自 NSTextView! 的正确文本。如果我在 func updateCaseTemplate() 上放了一个 Break,它永远不会到达它。任何帮助将不胜感激。我真的很想在这里学习,我已经用谷歌搜索了所有我能找到的解决方案。

最后,如果我这样做完全错误并且有更好的方法,请告诉我。

0 投票
1 回答
339 浏览

ios - NSTextStorage 里面有长文本。表现

NSTextStorage里面有一个长文本(比如一本书中有 500 页,在当前字体的设备上超过 9000 页)。我以这种方式为文本容器分发此文本:

问题是初始化所有这些容器等需要很长时间。我已经做了一些改进,比如从使用更改代码

while lastRenderedGlyph < layoutManager!.numberOfGlyphs {

lastRenderedGlyph = NSMaxRange(layoutManager!.glyphRange(for: textContainer))

cz 它的工作速度要慢得多。

那么,我还能做哪些其他改进?在 iPhone 7 上,启动大约需要 7 秒,在 iPhone 5s 上需要 20 秒 +

时间分析器显示,几乎所有时间都在获取 insertTextContainer 函数(addTextContainer)。

有什么建议么?

0 投票
0 回答
281 浏览

ios - 如何提高 NSTextStorage addAttribute 性能

我在NSTextStorage. 我以这种方式为 textContainers 分发此文本:

然后我将这个容器用于 pageViewController 上的 textViews。

我有一些标记,例如:

问题是:在整个文本存储中标记单词的工作非常缓慢。书中的页数越多,运行速度就越慢。

还有来自分析器的 cpu 使用截图。

在此处输入图像描述

有什么方法可以提高逻辑?

0 投票
1 回答
75 浏览

cocoa - NSTextView:复制列表项不包括粘贴时的列表格式

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

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

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

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

这是一个快速视频:

NSTextView 粘贴列表项

其他意见

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

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

NSTextView(复制一项)

Scrivener(复制一项)

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

NSTextView(复制了两项)

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

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