拦截NSTextFieldCell中的Keydown操作

时间:2013-07-15 21:01:28

标签: cocoa nstableview nsoutlineview nscell nstableviewcell

我有一个基于单元格的NSOutlineView,显示NSTextFieldCell个对象。

我想响应keydown或keyup事件,以便在文本包含某些预设关键字时使NSTextFieldCell中包含的文本变为粗体。实现这一目标的最优雅方式是什么 - 我应该:

  • 子类NSOutlineView并覆盖keydown方法
  • 子类NSTextFieldCell
  • 利用某种代表
  • 利用其他方法

非常感谢所有人提供任何信息!

2 个答案:

答案 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