【问题标题】:Insertion point not showing in the right place after delete删除后插入点未显示在正确位置
【发布时间】:2013-11-28 05:35:56
【问题描述】:

所以我试图让我的 NSTextView 语法高亮一些降价。这是它的样子:

但是当我按下删除键时,会发生这种情况:

有人知道怎么回事吗?

在我的- (void)textStorageDidProcessEditing:(NSNotification *)notification 委托中,我正在执行文本的完整解析,并且我有一个包含以下条目的字典:

@"paragraph": @{NSFontAttributeName: bodyFont,
                NSUnderlineStyleAttributeName: @(NSUnderlineStyleNone),
                NSForegroundColorAttributeName: paragraphColor}

我应用格式的方式是:

- (void) applyThemeIfRequired:(NSDictionary*)token {
  NSRange tokenRange = (NSRange)[token[@"range"] rangeValue];
  NSRange effectiveRange;
  NSTextStorage* storage = _textView.textStorage;

  NSDictionary* themeForToken = _theme[token[@"type"]];

  if (themeForToken) {
      [themeForToken enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
          id prop = [storage attribute:key atIndex:tokenRange.location effectiveRange:(NSRangePointer)&effectiveRange];
          if (![prop isEqualTo: obj] || ([prop isEqualTo:obj] && NSMaxRange(effectiveRange) < NSMaxRange(tokenRange))) {
              [storage addAttribute:key value:obj range:tokenRange];
              [storage fixAttributesInRange:tokenRange];
          }
      }];
   }
}

我发现如果我开始为整个字符串添加属性,就会导致这个错误,而上面的代码处理 block level 元素(即当样式应用于整行时) 好吧,如果属性在行内,它会重新出现这个问题。

一些更有趣的细节:

  • 插入文本时插入符号没有任何问题

  • 如果删除该行的第一个(也是唯一一个)字符,使其成为空行,则插入点将位于正确位置

  • 插入符号的列(X 轴)位置始终是正确的,只有 Y 轴值搞砸了。

  • 在大多数情况下,如果您在应用 last 样式的位置之前在文档中进行编辑,则不会出现此问题,示例如下.在这里,我刚刚删除了“g”,但插入符号很好。所以,唯一的问题是在last stlyed 文本内或之后进行编辑。

很抱歉这个问题有点长,但请询问我是否遗漏了什么。感谢您的帮助!

【问题讨论】:

    标签: cocoa osx-mavericks nstextview nstextstorage


    【解决方案1】:

    好的,我已经找到了解决方案:

    我从-textStorageWillProcessEditing: 方法调用我的parse 方法,出于某种原因,NSAttributedString 不喜欢它的属性被实时修改。所以,使用-performSelector:withObject:afterDelay调用parse选择器,延迟为0.0即可解决问题。

    但是,在延迟选择器中编辑NSTextStorage 的属性会导致-textStorageWillProcessEditing: 选择器被一次又一次地调用。因此,您必须使用在内容已完全解析时不执行解析的算法进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多