gpt4 book ai didi

objective-c - NSPopupButton 中带有绑定(bind)的分隔符项

转载 作者:太空狗 更新时间:2023-10-30 03:26:16 26 4
gpt4 key购买 nike

NSPopupButton 的内容绑定(bind)到字符串的 NSArray

我们如何通过绑定(bind)插入分隔符项?

-”字符串(就像在旧时代/经典时代一样)不起作用,即按字面意思显示为“-”菜单项。

是否有标准 Cocoa 类和绑定(bind)的开箱即用解决方案?

这应该是一个微不足道的问题,但我找不到任何不涉及愚蠢黑客的问题的解决方案,例如子类化 NSMenuNSPopupButton 或其他非直观的解决方法。

最佳答案

在使用绑定(bind)时,我找不到一种干净的方法来动态地将分隔符添加到菜单。我发现的最简单(也是最可重用)的方法是使用 NSMenuDelegate 动态交换具有特定标题的 NSMenuItems,例如 @"---" 以及 menuNeedsUpdate 中的分隔项: 委托(delegate)方法。

第 1 步:创建一个符合 NSMenuDelegate 协议(protocol)的 NSObject

#import <Cocoa/Cocoa.h>

@interface SeparatorMenuDelegate : NSObject <NSMenuDelegate>
@end
@implementation SeparatorMenuDelegate

-(void)menuNeedsUpdate:(NSMenu *)menu {
NSArray* fakeSeparators = [[menu itemArray] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"title == '---'"]];
for (NSMenuItem* fakeSep in fakeSeparators) {
[menu insertItem:[NSMenuItem separatorItem] atIndex:[menu indexOfItem:fakeSep]];
[menu removeItem:fakeSep];
}
}

@end

第 2 步:在 Interface Builder 中链接事物。

将一个对象拖出到包含 NSPopupButton 实例的场景中。 Drag out an object

将对象的类设置为SeparatorMenuDelegate

Set the object's class

旋转打开文档大纲中的 NSPopupButton 控件并选择其中的菜单。然后将菜单的委托(delegate)设置为您之前拖入的 SeparatorMenuDelegate 对象。

Set the menu's delegate

在此之后,菜单中标题为@"---"的所有项目都将转换为分隔符项目。

如果您在同一个场景中有多个 NSPopupButton 实例,您可以将它们的 Menu 的委托(delegate)设置为同一个对象(每个场景只需要一个 SeparatorMenuDelegate)。

关于objective-c - NSPopupButton 中带有绑定(bind)的分隔符项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com