我有一个基于单元格的NSOutlineView
,显示NSTextFieldCell
个对象。
我想响应keydown或keyup事件,以便在文本包含某些预设关键字时使NSTextFieldCell中包含的文本变为粗体。实现这一目标的最优雅方式是什么 - 我应该:
非常感谢所有人提供任何信息!
答案 0 :(得分:0)
找到它。
在awakeFromNib中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(actionToTakeOnKeyPress:) name:NSControlTextDidChangeNotification object:theNSOutlineViewThatContainsTheNSTextFieldCell];
然后添加如下方法:
- (void) actionToTakeOnKeyPress: (id) sender
{
//will be called whenever contents of NSTextFieldCell change
}
答案 1 :(得分:0)
要按照仍然可以过滤的方式拦截按键,可能会覆盖各种NSResponder
条消息,例如keyDown:
或interpretKeyEvents:
。
为了能够做到这一点,需要将NSTextView
的子类用作字段编辑器。为此,一个子类NSTextFieldCell
并覆盖fieldEditorForView:
,返回子类(请参阅Custom field editor for NSTextFieldCell in an NSTableView)。
以下是相关代码摘录:
在子类NSTextFieldCell
中(然后必须在Interface Builder中为可编辑列指定,或由NSTableViewDelegate
的{{1}}消息返回):
dataCellForTableColumn
还需要在- (NSTextView *)fieldEditorForView:(NSView *)aControlView
{
if (!self.myFieldEditor) {
self.myFieldEditor = [[MyTextView alloc] init];
self.myFieldEditor.fieldEditor = YES;
}
return self.myFieldEditor;
}
部分声明属性:
@interface
然后在@property (strong) MyTextView *myFieldEditor;
中,这是MyTextView
的子类:
NSTextView