假设我有一个NSObject
子类代表一个国家,例如
@interface CountryInfo : NSObject
@property (nonatomic, retain) NSString *countryName;
我的模型包含NSMutableArray
个CountryInfo
个。我想将数组绑定到NSComboBox
。组合框应显示国家/地区名称,并允许用户选择国家/地区。
所以,我设置了我的.xib:
CountryArrayController(NSArrayController)
ContentArray
NSComboBox
内容
内容值
到目前为止,这么好。现在,如何绑定NSComboBox
的值?文档说明:
"An NSString or NSNumber that specifies the value of the NSComboBox."
这是什么意思?
我注意到我可以将其绑定到我的模型上的NSString
,它将反映所选的countryName
。但我想绑定到CountyInfo
对象本身!无论是直接还是通过绑定到我的阵列控制器上的选择:我该如何设置它?
答案 0 :(得分:10)
我接近这个错误 - 使用的正确控制是NSPopUpButton
而不是NSComboBox
。
NSComboBox
具有不同的行为,因为它需要支持用户直接输入文本的场景。 NSPopUpButton
旨在仅使用一组预定义的值,并按照预期的“选择”绑定行为。
答案 1 :(得分:1)
这个问题似乎没有一个简单的解决方案,这是我找到的一个,实现了一个 NSArrayController 类别:
@interface NSArrayController( ComboBoxCompatibility )
@property(readwrite )NSString *firstSelectedObject;
@end
对于 getter 和 setter :
@implementation NSArrayController (ComboBoxCompatibility)
-(NSString *)firstSelectedObject
{
return [[self selectedObjects] firstObject];
}
-(void)setFirstSelectedObject:(NSString *)firstSelectedObject
{
NSUInteger idx = [[self arrangedObjects] indexOfObject:firstSelectedObject];
[self setSelectionIndex:idx];
}
@end
然后,您可以将 NSComboBox 的值绑定到数组控制器的 firstSelectedObject,只要其中的对象实现 copyWithZone:如果对象不是字符串而是具有单个属性“名称”,您也可以修改上面的代码例如,您在组合框列表中显示,在 setter 中用 [[selflocatedObjects] valueForKey:@"name"] 和 [[[selflocatedObject] firstObject] valueForKey:@"name"] 在吸气剂