Cocoa 如何以编程方式将新NSToolbarItem添加到现有工具栏?

Cocoa 如何以编程方式将新NSToolbarItem添加到现有工具栏?,cocoa,nstoolbar,nstoolbaritem,Cocoa,Nstoolbar,Nstoolbaritem,我正在寻找一个名为addNewItem:(NSToolbarItem*)item的方法,或者类似的方法,它允许我向工具栏添加一个通过编程创建的项,但我没有找到任何方法。我想添加一个在用户单击时显示弹出框的项目,就像在Safari中用户下载某些内容一样。您需要一个符合NSToolbarDelegate协议的类,并将该类的实例作为工具栏的委托。例如,此委托将实现-toolbar:itemforiteminidentifier:willbeinsertedintoolbar:,它为给定标识符返回一个N

我正在寻找一个名为
addNewItem:(NSToolbarItem*)item
的方法,或者类似的方法,它允许我向工具栏添加一个通过编程创建的项,但我没有找到任何方法。我想添加一个在用户单击时显示弹出框的项目,就像在Safari中用户下载某些内容一样。

您需要一个符合
NSToolbarDelegate
协议的类,并将该类的实例作为工具栏的委托。例如,此委托将实现
-toolbar:itemforiteminidentifier:willbeinsertedintoolbar:
,它为给定标识符返回一个
NSToolbarItem
实例,可能会根据需要创建该项。通过执行此操作,您正在准备让您的代理在工具栏要求返回与标识符对应的项目时返回工具栏项目

完成此操作后,您可以通过向工具栏实例发送
-[NSToolbar insertItemWithItemIdentifier:atIndex]
以编程方式向工具栏添加新的工具栏项。标识符字符串参数应与上面段落中使用的参数匹配。如果需要删除项目,请将
-[NSToolbar removietematindex:
发送到工具栏


这在文档的一节中用示例进行了描述。

为什么这么复杂,Apple?@Lukas因为早在设计NSToolbar时,这样的技术对于减少RAM消耗是必要的。这是一种标准的模式,可可豆中的所有东西过去都是这样工作的。只有新东西不是这样工作的。