1

我有一个NSTextViewand 我正在充当它的NSTextStorage代表,所以我正在获取textStorageWillProcessEditing:and的回调textStorageDidProcessEditing:,目前我正在使用did回调来更改文本上的一些属性(为某些单词着色)。

我想做的是添加某些字符对的自动匹配。当用户键入(时,我也想插入 a)但我不确定何时何地是执行此操作的适当时间。

从文本存储委托协议中,它说该will方法允许您更改要显示的文本..但我不确定这意味着什么或如何做到这一点。文本系统真的很大而且很混乱。

我该怎么做?

4

1 回答 1

2

在我的开源项目中,我进行了子类化NSTextView和覆盖insertText:以处理在那里插入匹配字符。您可以检查参数以insertText:查看它是否是您想要执行的操作,调用 super 以执行文本的正常插入,然后在需要insertText:时使用适当的匹配字符串再次调用。

像这样的东西:

- (void)insertText:(id)insertString {
    [super insertText:insertString];

    // if the insert string isn't one character in length, it cannot be a brace character
    if ([insertString length] != 1)
        return;

    unichar firstCharacter = [insertString characterAtIndex:0];

    switch (firstCharacter) {
        case '(':
            [super insertString:@")"];
            break;
        case '[':
            [super insertString:@"]"];
            break;
        case '{':
            [super insertString:@"}"];
            break;
        default:
            return;
    }

    // adjust the selected range since we inserted an extra character
    [self setSelectedRange:NSMakeRange(self.selectedRange.location - 1, 0)];
}
于 2012-06-04T21:22:11.137 回答