我在表视图中有一个文本字段单元格,在结束编辑时我需要知道它.我以为我会将我的Controller类设置为文本字段单元的委托,然后使用NSTextField的委托方法textDidEndEditing:,但是意识到文本字段单元似乎没有委托方法?为什么这样,在编辑完成后我能做什么(除了子类化)?
谢谢
NSTextFieldCell
继承自NSCell
(从技术上NSActionCell
继承自NSCell
).所述NSCell
类用于(从文档):
NSCell类提供了一种在NSView对象中显示文本或图像的机制,而不需要完整NSView子类的开销.
值得注意的是,单元类用于"显示文本或图像",而不是处理与用户的交互.同样,与NSTextField
班级:
NSTextField类使用NSTextFieldCell类来实现其用户界面.
在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
实例(而不是单元本身)的原因在于,当您在表中编辑单元格时,您正在处理的单元格不会直接编辑; 它是窗口(或自定义)字段编辑器.编辑结束时,字段编辑器然后将该单元格的新值传递给表视图.但是,表视图将发布通知,表示单元格已完成编辑.