【问题标题】:Binding image to NSPopupbutton from NSArrayController从 NSArrayController 将图像绑定到 NSPopupbutton
【发布时间】:2015-02-15 15:38:04
【问题描述】:

这个问题是link的扩展
(链接中的问题主要针对,将NSPopupbutton绑定到一个NSArrayController)

我有一个 Person 类具有属性 NSString *nameNSImage *avatar
我必须在弹出按钮中显示所有人员的姓名,如下图所示。

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


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

person.title = @"Michael";
person.image = [NSImage imageNamed:@"avatar.png"];
[_popupButton.menu addItem:person];

【问题讨论】:

  • NSMenuItem 公开了一个图像绑定。关于如何在 Interface Builder 中进行设置的问题?因为获得了对 NSMenuItem* 和 NSImage* 的访问权限,所以您只需像创建任何其他绑定一样创建绑定。
  • 如何动态创建 NSMenuItems。因为那是你的图像将被注入的地方。

标签: objective-c macos cocoa cocoa-bindings appkit


【解决方案1】:

有两种方法可以实现:-

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

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];

其次按照以下简单步骤:-

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

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

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

3) 在binding Inspector->Content ValuesModelKeyPath->array中选择PopUpButton

4) 现在要在popupButton 中设置image,请参考以下代码:-

NSMenuItem  *menuItm=[self.popUpBtn itemWithTitle:@"Michael"];
[menuItm setImage:[NSImage imageNamed:@"dot.gif"]];

编辑:-

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

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

【讨论】:

  • 请再次阅读问题。我只想在 Cocoa Bindings 中做。我知道你给出的解决方案。赏金中的评论还指出“我期待一个仅具有约束力的解决方案。”
  • 您可以使用 tableview 并通过绑定您可以填充数据。但是您需要在弹出按钮中添加该表格视图。请参阅更新后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多