objective-c – NSTextFieldCell代表?

前端之家收集整理的这篇文章主要介绍了objective-c – NSTextFieldCell代表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在表格视图中有一个文本字段单元格,从这个单元格结束编辑时,我需要这样做.我以为我将我的Controller类作为文本字段单元的委托,然后使用NSTextField的委托方法textDidEndEditing :,但是意识到文本字段单元格似乎没有委托方法?为什么这样,编辑完成后可以做什么(除了子类别)通知

谢谢

解决方法

NSTextFieldCell继承自NSCell(从技术上讲,它继承自NSCell的NSActionCell). NSCell类用于(从 docs):

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实例(而不是单元格本身)的原因在于,在编辑表格中的单元格时,您正在处理的单元格未被编辑直;它是窗口(或自定义)字段编辑器.当编辑结束时,字段编辑器然后将该单元格的新值传递给表视图.但是,表视图将发布一条通知,表示单元格已被完成编辑.

猜你在找的C&C++相关文章