NSPopupbutton结合了两个内容值。也许类似于DisplayPattern

时间:2013-06-10 17:53:27

标签: objective-c cocoa interface-builder nsmanagedobject nspopupbutton

我想使用NSPopupbutton来显示列表。列表中的每个元素都会合并来自NSManagedObject两个属性。

"firstname, userid"

我宁愿不添加瞬态属性,因为这会弄脏业务逻辑。

是否有一种简单的方法可以合并NSPopupbutton

中的内容值的两个值

看起来NSLabel有一个DisplayPattern。尽管如此,它似乎也只允许绑定到一个属性,尽管它可以适应字符串格式。

OSX而不是iOS。

1 个答案:

答案 0 :(得分:0)

在保持视图代码与模型代码分离的同时执行此操作的常用方法是使用Objective-C类别。如果您的托管对象子类名为MyManagedObject,您可以执行以下操作:

@interface MyManagedObject (ViewSupport)

@property (nonatomic, readonly) NSString* stringForPopUpButton;

@end


@implementation MyManagedObject (ViewSupport)

+ (NSSet *)keyPathsForValuesAffectingStringForPopUpButton
{
    return [NSSet setWithObjects:@"firstname", @"userid", nil];
}

- (NSString *)stringForPopUpButton
{
    return [NSString stringWithFormat: @"%@, %@", self.firstname, self.userid];
}

@end

此代码可以显示在单独的文件中,或者其他任何内容。此模式适用于组合两个属性等简单事物。对于更复杂的转换,逻辑通常存在于NSViewController子类中。通常使用-representedObject属性将模型推入这些对象,然后可以在Xcode / InterfaceBuilder等中构建附带的视图。此模式使数据保持逻辑与使用它的view / nib / xib相结合。