我在表视图中有一个文本字段单元格,需要让我知道它何时结束编辑。我想我应该将我的控制器类设置为文本字段单元格的委托,然后使用NSTextField的委托方法textDidEndEditing:,但是意识到文本字段单元格似乎没有委托方法?为什么会这样,当编辑完成时,我可以做什么(除子类化之外)来得到通知?
谢谢
发布于 2009-05-27 20:39:42
NSTextFieldCell继承自NSCell (从技术上讲,继承自NSCell的NSActionCell )。NSCell类用于(从docs):
NSCell类提供了一种在NSView对象中显示文本或图像的机制,而不会产生完整NSView子类的开销。
值得注意的是,cell类用于“显示文本或图像”,而不是处理与用户的交互。类似地,对于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实例(而不是单元格本身)的原因是,在编辑表格中的单元格时,您正在处理的单元格并没有被直接编辑;它是窗口的(或自定义的)字段编辑器。编辑结束时,字段编辑器会将该单元格的新值传递给表格视图。但是,表视图将发布一条通知,告知某个单元格已完成编辑。
发布于 2010-02-08 20:20:42
在NSTableViewDataSource协议中实现tableView:setObjectValue:forTableColumn:row:方法。将它放在您已经实现的tableView:objectValueForTableColumn:row:方法的旁边。
- (void)tableView:(NSTableView *)aTableView
setObjectValue:(id)anObject
forTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex
{
[mutableArrayWithStrings replaceObjectAtIndex:rowIndex withObject:anObject];
}https://stackoverflow.com/questions/917810
复制相似问题