将图像绑定到NSArrayController的NSPopupbutton

Kau*_*eya 7 macos cocoa objective-c appkit cocoa-bindings

这个问题是链接的扩展(链接中
的问题主要是目标,将NSPopupbutton绑定到NSArrayController)

我有一个Person有类属性NSString *nameNSImage *avatar
我都必须表现弹出按钮人员的所有名称作为下面的图片中看到的. 在此输入图像描述

但是现在,随着要求的变化,我也需要展示人的化身.
如何使用Cocoa绑定将人的头像绑定到NSPopup按钮,使其看起来像上面图像中的michael(最后一个菜单选项)


注意:Michael已使用以下代码暂时添加进行演示:

person.title = @"Michael";
person.image = [NSImage imageNamed:@"avatar.png"];
[_popupButton.menu addItem:person];
Run Code Online (Sandbox Code Playgroud)

Hus*_*bir 0

有两种方法可以实现这一目标:-

首先在两列中获取基于单元格的表格视图,第一列用于图像单元格,第二列用于文本单元格。通过绑定填充表格,然后按以下方式将表格视图添加到弹出按钮中:-

NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@""];
NSMenuItem *Item = [[NSMenuItem alloc] initWithTitle:@"NameList" action:NULL keyEquivalent:@""];
[Item setView:self.tableVw];
[theMenu addItem:Item];
[self.popUptn setMenu:theMenu];
Run Code Online (Sandbox Code Playgroud)

其次,请按照以下简单步骤操作:-

假设您的数组包含名称元素。

1) 选择您的arrayContoller绑定到FileOwner'sModelKeyPath->array

2) 选择PopUpButton内部binding Inspector->Selected Object绑定到FileOwner'sModelKeyPath->yourString。这将相应地选择所需的名称。

3)选择PopUpButton内部binding Inspector->Content ValuesModelKeyPath->array

4)现在设置image内部popupButton参考下面的代码:-

NSMenuItem  *menuItm=[self.popUpBtn itemWithTitle:@"Michael"];
[menuItm setImage:[NSImage imageNamed:@"dot.gif"]];
Run Code Online (Sandbox Code Playgroud)

编辑:-

1)在第一种方法中,您的文本和图像都是通过绑定填充的,只需在弹出按钮中添加该表格视图即可。

2)在第二种方法中,您的弹出按钮将以编程方式显示姓氏的图像。另外,如果需要显示所有名称的图像,则使用 for 循环在菜单项内设置图像。