当前位置:  开发笔记 > IOS > 正文

NSTextFieldCell委托?

如何解决《NSTextFieldCell委托?》经验,为你挑选了1个好方法。

我在表视图中有一个文本字段单元格,在结束编辑时我需要知道它.我以为我会将我的Controller类设置为文本字段单元的委托,然后使用NSTextField的委托方法textDidEndEditing:,但是意识到文本字段单元似乎没有委托方法?为什么这样,在编辑完成后我能做什么(除了子类化)?

谢谢



1> Alex Rozansk..:

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有