【问题标题】:NSTextView: replace all tabsNSTextView:替换所有选项卡
【发布时间】:2012-05-19 15:30:21
【问题描述】:

我有一个NSTextView,我想在其中使用空格而不是制表符。我虽然会在 textStorageWillProcessEditing: 中的 textview delegate 中使用 replaceOccurrencesOfString:withString:options:range:,但它不起作用(撤消中断)。

请问,有人知道如何实现这样的功能吗?还有其他方法吗?

编辑:这就是我在textStorageWillProcessEditing: 方法中的内容:

ts = [notification object];
[[ts mutableString] replaceOccurrencesOfString:@"\t"
                                    withString:@"  "
                                       options:NSLiteralSearch
                                         range:[ts editedRange]];

【问题讨论】:

  • 我怀疑你在让它工作方面真的很接近。如果您有文本视图的文本存储句柄,则可以对其进行“replaceOccurrencesOfString:”调用。修改此问题以显示您到目前为止所做的代码,如果仍然无法正常工作,我会尝试为您回答(如果其他人没有出现并先回答)。
  • @MichaelDautermann:完成,谢谢!
  • 这个中断如何撤消?您的代码对我来说似乎工作正常。
  • 当我点击“a”、“tab”、撤消、重做时,出现的是“a_”,而不是“a__”。更准确地说,空间在那里,但光标移动到错误的位置。此外,当我粘贴较长的文本时,撤消只会删除其中的一部分。
  • 与其使用 NSTextStorage 处理这个问题,不如使用 NSTextView 处理它。你可以在 NSTextViewDelegate 中查看-textView:shouldChangeTextInRange:replacementString:-textDidChange:-textView:didCheckTextInRange:types:options:results:orthography:wordCount:

标签: cocoa nstextview


【解决方案1】:

您可以覆盖 keyUp: 方法。 如果 event.keyCode == keycodefortabwhichidontknow :) 那么你可以插入四个空格。

如果没有,当然只需调用 [super keyDown:theEvent];

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多