我有一个NSTextView
而我正在扮演NSTextStorage
代表的角色,所以我收到了textStorageWillProcessEditing:
和textStorageDidProcessEditing:
的回调,而且我现在正在回复使用did
回调来更改文本上的某些属性(着色某些单词)。
我想要做的是添加某些字符对的自动匹配。当用户键入(
时,我也要插入)
,但我不确定何时或何地适当地执行此操作。
从文本存储委托协议,它说will
方法允许您更改要显示的文本..但我不确定这意味着什么或如何做到这一点。文本系统非常庞大且令人困惑。
我该怎么做?
答案 0 :(得分: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)];
}