谢谢
解决方法
The NSCell class provides a mechanism for displaying text or images in an NSView object without the overhead of a full NSView subclass.
值得注意的是,单元格类用于“显示文本或图像”,而不是处理与用户的交互.同样,使用NSTextField类:
The NSTextField class uses the NSTextFieldCell class to implement its user interface.
NSTextField处理实际的用户输入,同时使用文本字段单元简单地实现其用户界面,类似地,当文本编辑结束时提供通知的委托方法通过NSTextField类提供,而不是通过NSTextFieldCell类.
如果您希望在NSTableView中编辑结束时收到通知,那么您需要注册自己作为NSTextDidEndEditingNotification的观察者(如果您不熟悉通知,您可能需要阅读NSNotificationCenter类引用).为此,请在控制器类中放置以下内容: awakeFromNib函数是包含它的一个好地方,以确保在应用程序的启动时调用它:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(textDidEndEditing:) name:NSTextDidEndEditingNotification object:tableView];
其中tableView是指向您的NSTableView对象的指针.然后,简单地实现方法如下:
- (void)textDidEndEditing:(NSNotification *)aNotification { // Do what you want here }
不要忘记在释放时作为观察员移除自己:
- (void)dealloc { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc removeObserver:self]; }
您将要观察的对象设置为NSTableView实例(而不是单元格本身)的原因在于,在编辑表格中的单元格时,您正在处理的单元格未被编辑直;它是窗口(或自定义)字段编辑器.当编辑结束时,字段编辑器然后将该单元格的新值传递给表视图.但是,表视图将发布一条通知,表示单元格已被完成编辑.