- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 iOS/osx 编写语法 Markdown 。
它是 NSTextStorage 的子类。它在 iOS 中运行良好,但在 OSX 中(将代码 UIColor 转换为 NSColor 并将 UIFont 转换为 NSFont 后)它确实运行良好。如果我在当前行的末尾书写,效果很好,但如果我将插入符号位置更改为文本中间,在键入 1 个字母后,它会将插入符号位置更改为行尾。这只发生在 OSX 中,因为在 IOS 中它运行良好。
我知道问题出在 - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range
但不知道如何解决...有什么帮助吗?
- (NSString *)string {
return [_backingStore string];
}
- (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range {
return [_backingStore attributesAtIndex:location effectiveRange:range];
}
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString*)str {
[self beginEditing];
[_backingStore replaceCharactersInRange:range withString:str];
[self edited:NSTextStorageEditedCharacters | NSTextStorageEditedAttributes range:range changeInLength:str.length - range.length];
[self endEditing];
}
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range {
[self beginEditing];
[_backingStore setAttributes:attrs range:range];
[self edited:NSTextStorageEditedAttributes range:range changeInLength:0];
[self endEditing];
}
- (void)processEditing {
[self performReplacementsForRange:[self editedRange]];
[super processEditing];
}
- (void)performReplacementsForRange:(NSRange)changedRange {
NSString* backingString = [_backingStore string];
NSRange extendedRange = extendedRange = NSUnionRange(changedRange, [backingString lineRangeForRange:NSMakeRange(NSMaxRange(changedRange), 0)]);
[self applyStylesToRange:extendedRange];
}
- (void)applyStylesToRange:(NSRange)searchRange {
NSDictionary* attributeDictionary = self.attributeDictionary;
NSString* backingString = [_backingStore string];
NSDictionary* bodyAttributes = self.bodyAttributes;
[self setAttributes:bodyAttributes range:searchRange];
[attributeDictionary enumerateKeysAndObjectsUsingBlock:^(NSRegularExpression* regex, NSDictionary* attributes, BOOL* stop) {
[regex enumerateMatchesInString:backingString options:0 range:searchRange
usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) {
NSRange matchRange = [match rangeAtIndex:1];
[self addAttributes:attributes range:matchRange];
}];
}];
}
最佳答案
我不熟悉 NSTextStorage,但我设法通过覆盖 fixAttributesInRange:
而不是 processEditing
来解决这个问题。
代替
- (void)processEditing {
[self performReplacementsForRange:[self editedRange]];
[super processEditing];
}
做
- (void)fixAttributesInRange:(NSRange)range {
[self performReplacementsForRange:range];
[super fixAttributesInRange:(NSRange)range];
}
顺便说一句:applyStylesToRange
不应该嵌套在 beginEditing
和 endEditing
之间吗?
关于ios - NSTextStorage 语法 Markdown ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522394/
我目前正在 iOS 上开发自定义 NSTextStorage,我需要检测一些主题标签 (#)、提及和 url...此时一切正常,但如果用户尝试从键盘输入表情符号字符不显示,因为我使用的是 Helvet
每个示例都将 NSMutableAttributedString 显示为“后备存储”,用于保存与查看/编辑文本相关的文本和属性。我如何使用替代品,例如 std::string 或数据库中的内容。作为测
我有一个 NSTextStorage 的子类,它给我带来了一些问题。每次我执行以下操作时都会崩溃: 在第一行输入一些文字 按返回移动到下一行 至少输入两个字符 点击退格键 我遇到的错误是Termati
我正在构建一个自定义 NSTextStorage 类来查找和匹配自定义用户输入并在我的应用程序中处理它。所以我遵循了几个教程,最著名的是 objc.io's ,并创建了一个子类并将其 layoutMa
我正在子类化 NSTextStorage 来做一些链接突出显示,我已经阅读了 I can on the topic .一切正常,直到我输入 🏒 表情符号字符。 我的子类: private let i
我有一个 NSTextView 子类作为其 NSTextStorage 委托(delegate)。我正在尝试做两件事: 以某种方式突出显示文本 评估文本,然后将答案附加到 TextView 。 我使用
我正在为 iOS/osx 编写语法 Markdown 。 它是 NSTextStorage 的子类。它在 iOS 中运行良好,但在 OSX 中(将代码 UIColor 转换为 NSColor 并将 U
我有一个 NSTextStorage里面有长文本(比如一本书有 500 页,当前字体在设备上超过 9000 页)。我以这种方式为 textcontainer 分发此文本: let textStorag
我有一个 UITextView,它应该接收从 HTML 收缩的 NSAttributesString。最终结果是带有自定义链接下划线的黑色文本。我快崩溃了。 Terminating app due t
我有一个自定义的 UITextView,它通过定义一个自定义的 NSTextStorage 类来利用 Apple 的 TextKit,但是,当我将我的子类用于自定义 TextView 的文本存储时(如
我正在尝试 iOS 的文本解析器。我有一些粗体、斜体、突出显示等语法。我在 UITextView 中使用 NSTextStorage 实例对其进行了设置,以监视更改并设置正确的属性。如果我用文本预加载
根据文档,我尝试继承 NSTextStorage 并在 TextView 中使用它: /* NSTextStorage is a semi-abstract subclass of NSMutabl
对于 NSTextStorage 对象,我想将其设置为具有来自第三方库的 malloc 存储。 (存储的特殊之处在于它是不可交换的,并且不能被复制。)我能发现的唯一可能的方法可能是 allocWith
我有一个 NSTextStorage 委托(delegate)实现 textStorageDidProcessEditing:。不幸的是,userInfo 不包含有关文本更改的任何详细信息。 如何找出
我尝试将此行移植到 xamarin let textStorage = NSTextStorage(attributedString: self.attributedText!) 但我找不到采用 NS
我尝试将此行移植到 xamarin let textStorage = NSTextStorage(attributedString: self.attributedText!) 但我找不到采用 NS
我正在编写一个使用 UITextView 处理富文本编辑的应用程序。它使用 NSTextStorage 为部分字符串设置新属性。然而,如果用户想要在字符串末尾或字符串中间更改字体或字体大小(换句话说,
为了破解another problem分成更小的部分,我正在尝试设置所有 TextKit 组件。但是,在更改初始化 NSTextStorage 的方式后,我遇到了崩溃。出于测试目的,我已将项目简化为以
我有一个用于简单文本编辑器的 NSDocument 子类(使用 Lion 基于文档的新应用程序模板,几乎没有自定义),我遇到了一个奇怪的错误,将文件内容加载到文本存储中。 这是我的代码: - (voi
如何使用 NSTextStorage 存储 NSTextView 的信息? 最佳答案 参见Assembling the Text System by Hand在 Cocoa Text Architec
我是一名优秀的程序员,十分优秀!