Cocoa-在NSCollectionView中使用表示对象的NSButton

时间:2014-07-02 20:37:27

标签: objective-c cocoa nscollectionview nscollectionviewitem

设置

我有NSCollectionView。我在View Prototype中有一个复选框。我已成功设置绑定,以便填充Card Titleaction。 (图1,下方)

目标

当我点击该复选框时,我想运行一个访问CardModel已经能够访问的特定View Prototype的函数。然后我会相应地操纵它的数据。

研究

我在SO上发现了这篇文章:Get the representedObject values of NSCollectionViewItem NSButton click,它很好地描述了我的情况。遗憾的是,答案是没有具体的代码。这是建议的内容:

  

因此,首先,将按钮单元格的代表对象设置为   拥有该按钮的集合视图项。 (您可以在笔尖中执行此操作   编辑。)然后,在你的动作方法中,获取按钮的单元格,然后是   单元格表示的对象(即项目),然后是项目的对象   代表对象。

看起来很简单吧?

尝试解决方案

我创建了一个方法cardCheckBoxClicked:并将其连接到复选框。

根据上述建议,我将button cell的来法representedObjectCard Collection View Item联系起来。 (图2)

然后我尝试在代码中获取Card Collection View Item的{​​{1}}。

来自representedObject

MainWindowController.h

错误

当我点击复选框时,出现以下错误:

-(IBAction)cardCheckBoxClicked:(id)sender
{
    CardModel* cModel = [[sender representedObject] representedObject];

    NSLog(@"card title: %@",cModel.title);
}

问题!

那么 - 我如何访问-[NSButton representedObject]: unrecognized selector sent to instance 0x6080001581b0 代表的对象?我误解了上面给出的建议吗?如何成功访问我需要的数据?

图片(参考)

绑定示例 enter image description here

表示对象连接 enter image description here

2 个答案:

答案 0 :(得分:4)

这里:

-[NSButton representedObject]:

您是否要求类NSButton运行方法representObject。确保区分Class,该类的对象或实例。

您需要获取实际按钮,获取其按钮单元格(至少我认为这是您想要的),然后在单元格上调用representObject。如果我正确理解你。我从不接触界面构建器,所以这里完全编写了符合您要求的代码。

someObject = [[theButton cell] representedObject];

答案 1 :(得分:0)

除了CH Buckingham的回答,你还应该考虑使用绑定。您可以将复选框的值绑定绑定到集合视图项,并将模型关键路径representedObject绑定到CardModel上的某个属性。 (如果需要,键路径可以继续通过模型对象图。)只要按钮被切换,就会设置该属性。