问题标签 [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.
ios - NSTextStorage 语法标记
我正在为 iOS/osx 编写语法降价。
它是 NSTextStorage 的子类。它在 iOS 中运行良好,但在 OSX 中(在将代码转换为 UIColor 到 NSColor 和 UIFont 到 NSFont 之后)它运行得非常好。如果我在当前行的末尾写它会很好,但是如果我将插入符号位置更改为文本中间,就在键入 1 个字母后,它会将插入符号位置更改为行尾。这只是在 OSX 中发生,因为在 IOS 中它工作得很好。
我知道问题出在哪里,- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range
但不知道如何解决……有什么帮助吗?
ios - NSTextStorage 子类在某些情况下无法处理表情符号字符并更改字体
我正在继承NSTextStorage
做一些链接突出显示,我已经尽可能多地阅读了这个 主题。在我输入表情符号之前,一切正常。
我的子类:
没什么复杂的。然后,当输入臭名昭著的角色时,它会出于某种随机原因切换到 Courier New:
现在我正在挑选这个角色,还有其他人也导致了这种疯狂。我在输入时查询了字体,它来自 System > Apple Emoji > Courier New。
我还尝试设置processEditing()
半解决问题的字体,它会导致添加额外的空间(虽然不是在模拟器中)。而且我正在硬编码一个值==不好。
终极问题:
我究竟做错了什么?我没有看到其他人的实现存在这个问题,我确信开发人员已经继承了 NSTextStorage。
注意:我可以确认在objc.io 的演示应用程序中存在相同的问题。
ios - 在 UITextView.text 中确定单词并使用 Swift 2.2、iOS 9.3 和 Xcode 7 修改带有前缀的单词的方法?
使用 TextView 进行用户消息输入,在用户编辑期间它是可编辑和可选择的。字段下方的按钮之一,在编辑和哈希标记模式之间切换 TextView。当切换到标记时,TextView 禁用了它的可编辑和可选属性,并且我有一个功能来检测点击并返回文本中的字符位置。
我需要确定点击的单词(如果有),并通过在 UITextView.text 中添加前缀来修改该单词 # 除非它已经有两个哈希值,否则它会删除哈希值。我正在为逻辑使用正则表达式。
我还没有找到一种高级方法来确定被点击的字符的单词。我已经搜索了Apple的Dev。库。以及像 raywenderlich 和 Grok Swift 这样的网站,但找不到我确定必须存在的方法。
我可以通过测试当前字符是否是有效的单词分隔符来实现,如果不是,则减少字符索引并测试直到确定单词边界。此时,我返回之前的索引并测试#字符,如果是#,我会测试下一个字符,如果不是#,我会在开头添加#字符这个词的。
UIKit、TextKit 或 UITextView 或 NSTextStorage 的方法中是否有一个函数可以返回被点击字符的单词和该单词的 NSRange?另外,将 # 添加到 TextView 文本的正确方法是什么?[textView:shouldChangeTextInRange:replacementText 或 textView.textStorage:replaceCharactersInRange:withString:]
我曾在 PC、PlayStation 和 GameBoy 上进行过商业工作,但这是第一次开发应用程序并使用 iPhone/Mac 平台,所以我真的可以参考建议。
swift - 子类 NSTextStorage 会导致严重的内存问题
我有一个自定义UITextView
,通过定义自定义类来利用 Apple 的 TextKit NSTextStorage
,但是,当我将我的子类用于自定义文本视图的文本存储(如下实现)并尝试打开任何大于 20.0KB 的文件时,应用程序崩溃到内存泄漏:“ Message from debugger: Terminated due to memory issue
”。
奇怪的是,如果我BMTextStorage
只用一个标准的,替换我的自定义NSTextStorage
,文本会立即加载而没有任何内存泄漏,并且使用 < 30MB 的 RAM。这是什么原因造成的?
文本视图.swift
BMTextStorage.swift
swift - NSTextStorage 轻松/背景属性更改
我正在用一个相对较小的文本编辑器完成一个不错的应用程序。在执行语法高亮显示期间,我发现自己需要更改已识别标记的前景色属性。我注意到NSTextStorage有一个属性:
关于它的文档是:
一个布尔值,指示文本存储对象是否懒惰地修复属性。(只读)
讨论
子类化时,此属性的默认值为 NO,这意味着您的子类会在属性更改时立即修复它们。系统的具体子类覆盖此属性并将其设置为 YES。
我真的不知道如何解释这个......但这就是我所做的:
- 我正在更改内部识别标记的属性
textStorage(textStorage: NSTextStorage, didProcessEditing editedMask: NSTextStorageEditActions, range editedRange: NSRange, changeInLength delta: Int)
(这是 NSTextStorage 的委托方法)。在这里,我正在检查此属性的值 - 它是 FALSE。 - 我完全按照 Apple 的建议( https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/Subclassing.html )对NSTextStorage 进行了子类化并覆盖了该属性。文本视图开始表现得很奇怪。实际上,对于小文本,它的性能还可以,但是一旦我打开一个 4 MB 的文件-它就会挂起并且……好吧……坏事开始发生在我的 mac 上。实际上,这种行为不依赖于
fixesAttributesLazily
属性的值。也许我的 NSTextStorage 实现很糟糕,或者至少不复杂。
任何在后台或懒惰地应用属性的技巧或......这样的东西都是受欢迎的。
另外:我知道有很多方法可以优化突出显示的语法。它可能会部分突出显示,使用某种逻辑,基于更改的范围......等等。我正在寻找的是一种在后台处理属性更改的方法。例如,目前当我将 4 MB 文件粘贴到文本视图时,它首先突出显示它(需要 2-3 秒),然后将其可视化。我正在寻找的效果是立即出现的文本,并在一段时间后出现 - 颜色。
我正在做的项目是用 Swift 编写的。
提前感谢大家的帮助。您可以通过 gmail dot com 的 ivailon 与我联系以获取详细信息,因为我不想在这里公开该应用程序……至少现在还没有 ;-)
ios - iOS 9:如何使用自定义 NSTextStorage 更新 UITextView 中的属性内容
我正在使用UITextView
来显示具有自定义属性的属性字符串。出于这个原因,我决定实现我自己的NSTextStorage
,这样在每次处理之后我都可以插入我的自定义属性。
每当我需要显示时,UITextView
我都会像这样设置它的文本:
textView.attributedText = mutableText
但是,通过使用我的 newNSTextStorage
似乎更新attributedText
对 UITextView 没有影响,它只显示它创建的占位符文本。
如何将 的attributedText
属性连接UITextView
到存储在 中的属性字符串NSTextStorage
?我需要在两个对象上覆盖哪些方法才能实现这一点?
ios - 附加文本时,由 NSTextStorage 支持的 UITextView 未更新
下面是一个由 NSTextStorage 支持的 UITextView 的简单示例。“doAction1”通过单击某个 UI 按钮触发。通读文档,我的印象是,通过在开始/结束编辑块中更新 NSTextStorage,视图也会自动更新自身。
然而,这似乎并没有发生——下面的例子附加了“......世界!” 到 NSTextStorage 但 UITextView 没有反映这一点 - 并继续只显示“你好”。任何想法?
fonts - 自定义 NSTextStorage:表情符号默认不显示
我在自定义 NSTextStorage 子类中遇到了表情符号问题。该类不存储传递给它的任何属性。相反,它会生成自己的:
这主要工作正常。但是,如果字符串中有任何表情符号,它们根本不会出现。在检查 NSTextView 对文本存储的调用时,文本视图似乎试图将任何表情符号范围的字体属性设置为 AppleColorEmoji 字体,只要它们出现。如果您将文本视图作为“属性真相”的来源,那很好,但我不希望我的程序那样工作。就我而言,文本存储需要是任何属性的唯一供应商。它不能听文本视图发送的任何东西,属性方面。
我是否必须手动检测字符串中的任何表情符号并手动设置 AppleColorEmoji 字体?或者,还有更好的方法?我已经尝试过使用后备字体并自动搜索包含缺失字符的字体,但使用这些方法似乎没有涵盖表情符号。
ios - NSTextStorage 子类在删除字符时崩溃
我有一个 NSTextStorage 的子类,这给了我一些问题。每次执行以下操作时,我都会崩溃:
- 在第一行输入一些文本
- 按回车键移动到下一行
- 输入至少两个字符
- 按退格键
我得到的错误是Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The index -4097 is invalid'
真正的问题是我无法将错误追溯到我自己的任何代码。我可以通过调试得到的最远的结果是在调用super.processEditing
的覆盖范围内。processEditing
堆栈跟踪也没有给我任何东西。
编辑:做了一些更多的测试,发现这只发生在 iOS 9 和更新版本上。8 或以下的任何东西都不会崩溃。
ios - 更新 NSTextStorage 字体时崩溃
我的UITextView
响应UIContentSizeCategoryDidChangeNotification
响应动态字体变化,我实现了以下代码:
它总是在最后一行崩溃,[textStorage endEditing];
. 我启用了异常断点,但调试窗格中没有其他信息,请参阅下面的回溯。如果我删除'beginEditing
and endEditing
,它会在线崩溃removeAttribute
。我在[UIFont fontWithDescriptor: [UIFontDescriptor preferredFixedFontDescriptorWithTextStyle: IDFontTextStyleFixed] size: 0.0f];
整个应用程序中都使用它,它可以在任何地方使用,除了UITextView
.
任何人都知道出了什么问题以及我该如何解决?
编辑:这是回溯: