加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – NSTextFieldCell代表?

发布时间:2020-12-16 05:29:15 所属栏目:百科 来源:网络整理
导读:我在表格视图中有一个文本字段单元格,从这个单元格结束编辑时,我需要这样做.我以为我将我的Controller类作为文本字段单元的委托,然后使用NSTextField的委托方法textDidEndEditing :,但是意识到文本字段单元格似乎没有委托方法?为什么这样,编辑完成后可以做
我在表格视图中有一个文本字段单元格,从这个单元格结束编辑时,我需要这样做.我以为我将我的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实例(而不是单元格本身)的原因在于,在编辑表格中的单元格时,您正在处理的单元格未被编辑直;它是窗口(或自定义)字段编辑器.当编辑结束时,字段编辑器然后将该单元格的新值传递给表视图.但是,表视图将发布一条通知,表示单元格已被完成编辑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读