首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTextFieldCell代理?

NSTextFieldCell代理?
EN

Stack Overflow用户
提问于 2009-05-27 20:16:26
回答 2查看 3.5K关注 0票数 10

我在表视图中有一个文本字段单元格,需要让我知道它何时结束编辑。我想我应该将我的控制器类设置为文本字段单元格的委托,然后使用NSTextField的委托方法textDidEndEditing:,但是意识到文本字段单元格似乎没有委托方法?为什么会这样,当编辑完成时,我可以做什么(除子类化之外)来得到通知?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-27 20:39:42

NSTextFieldCell继承自NSCell (从技术上讲,继承自NSCellNSActionCell )。NSCell类用于(从docs):

NSCell类提供了一种在NSView对象中显示文本或图像的机制,而不会产生完整NSView子类的开销。

值得注意的是,cell类用于“显示文本或图像”,而不是处理与用户的交互。类似地,对于NSTextField类:

NSTextField类使用NSTextFieldCell类来实现其用户界面。

NSTextField处理实际的用户输入,同时使用文本字段单元格简单地实现其用户界面,类似地,在文本编辑结束时提供通知的委托方法是通过NSTextField类提供的,而不是通过NSTextFieldCell类提供的。

如果您希望在编辑以NSTableView结束时收到通知,则需要将自己注册为NSTextDidEndEditingNotification的观察者(如果您不熟悉通知,则可能需要阅读NSNotificationCenter类参考)。为此,将以下内容放入您的控制器类中;awakeFromNib函数是一个很好的位置来包含它,以确保在应用程序启动时调用它:

代码语言:javascript
复制
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
       selector:@selector(textDidEndEditing:)
           name:NSTextDidEndEditingNotification
         object:tableView];

其中tableView是指向NSTableView对象的指针。然后,只需按如下方式实现方法:

代码语言:javascript
复制
- (void)textDidEndEditing:(NSNotification *)aNotification
{
    // Do what you want here
}

别忘了在释放时删除自己的观察者身份:

代码语言:javascript
复制
- (void)dealloc
{
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc removeObserver:self];
}

将观察到的对象设置为NSTableView实例(而不是单元格本身)的原因是,在编辑表格中的单元格时,您正在处理的单元格并没有被直接编辑;它是窗口的(或自定义的)字段编辑器。编辑结束时,字段编辑器会将该单元格的新值传递给表格视图。但是,表视图将发布一条通知,告知某个单元格已完成编辑。

票数 15
EN

Stack Overflow用户

发布于 2010-02-08 20:20:42

在NSTableViewDataSource协议中实现tableView:setObjectValue:forTableColumn:row:方法。将它放在您已经实现的tableView:objectValueForTableColumn:row:方法的旁边。

代码语言:javascript
复制
- (void)tableView:(NSTableView *)aTableView
   setObjectValue:(id)anObject
   forTableColumn:(NSTableColumn *)aTableColumn
              row:(NSInteger)rowIndex
{
    [mutableArrayWithStrings replaceObjectAtIndex:rowIndex withObject:anObject];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/917810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档