编辑 NSOutlineView 项目后使用委托

Posted

技术标签:

【中文标题】编辑 NSOutlineView 项目后使用委托【英文标题】:Using delegate after editing NSOutlineView item 【发布时间】:2013-11-26 00:43:09 【问题描述】:

我的设置是

我有一个包含一个 NSpanel 和一个 NSOutlineView 的 nib 文件。

大纲视图是通过绑定和 NSTreeController 填充的,我有 NSOutlineView 的子类,其中我有一些委托和拖放方法。

我的问题

我正在尝试实现委托方法

- (void)textDidEndEditing:(NSNotification *)aNotification

我可以编辑 NSOutlineview 中的任何项目,一旦我点击“返回”,就会调用委托方法,但是窗口不再处于活动状态。并且该项目处于“编辑模式”我必须单击已编辑项目上方或下方的项目才能终止编辑模式。我附上了几张图片来说明

目前,除了 NSlog 之外,我在 textdidendediting 中没有任何内容来查看它是否被调用。如果我按预期删除它执行的方法,则编辑完成,窗口仍处于活动状态。

编辑项目

一旦我点击“返回”,窗口就会失去焦点并且项目仍处于编辑模式。

【问题讨论】:

您是否尝试调用 -[super textDidEndEditing:]? @KenAspeslagh 做到了!如果您将评论更改为我会接受的答案,我也希望您能快速解释一下为什么在这种情况下您必须调用 super。谢谢 【参考方案1】:

如果覆盖 NSOutlineView 的 textDidEndEditing: 正在改变 tableview 的行为,请尝试添加对 -[super textDidEndEditing:] 的调用。

这里发生的事情是NSOutlineView(或其超类之一)在textDidEndEditing: 中做一些重要的事情,并且通过在您的子类中覆盖该方法,父类的方法永远不会被调用。

【讨论】:

以上是关于编辑 NSOutlineView 项目后使用委托的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历我的 NSOutlineView 的所有项目?

以编程方式将核心数据实体中的项目放入 NSOutlineView?

NSOutlineView 不折叠项目

从 NSOutlineView 中拖放

更新 NSOutlineView 的内容

SwiftUI:如何从 OutlineGroup 中获取选择?