2

我遇到了 NSComboBox 组件的一个奇怪问题。它的“selectIndexAtPath”行为根据数据源而变化:

  • “固定”列表会导致正确选择该项目,但是当我通过单击右侧的箭头按钮打开列表时,它会一直被选中;
  • 使用数据源会导致正确选择该项目,但是当我通过单击右侧的箭头按钮打开列表时,该项目仍被选中 1/10 秒,但随后被取消选择。

一些代码来说明:

@interface AppDelegate()

@property (weak) IBOutlet NSComboBox *combobox;
@property (strong, nonatomic) NSArray *temp;

@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    self.temp = @[@"Item", @"Item2", @"Item3", @"Item4", @"Item5"];

    /* THIS DOES WORK */
    self.combobox.usesDataSource = NO;
    [self.combobox addItemsWithObjectValues:self.temp];

    /* HOWEVER, THIS DOES NOT WORK */
    self.combobox.usesDataSource = YES;
    self.combobox.dataSource = self;

    [self.combobox selectItemAtIndex:2];
}

#pragma mark - NSComboBoxDataSource methods

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox
{
    return self.temp.count;
}

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index
{
    return self.temp[index];
}

有谁知道这是什么原因造成的?现在尝试了几天...谢谢!

4

2 回答 2

2

找到了!

您还需要indexOfItemWithStringValue像这样实现:

- (NSUInteger)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)aString
{
    return [self.temp indexOfObject:aString];
}
于 2013-07-26T11:15:34.380 回答
0

要将选定的组合框设置为数据源的选定项,请按照文档使用以下内容:

[self.comboBox selectItemAtIndex:2];
[_comboBox setObjectValue:[self comboBox:_comboBox 
           objectValueForItemAtIndex:[_comboBox indexOfSelectedItem]]];

但是,主要问题是,由于您将数据源设为“自我”,因此它需要实现 NSComboBoxDataSource 协议。由于您的“自我”数据源未实现此协议,因此它将无法正常工作。

请注意,在上面的选择器中,当我说 [self comboBox:_comboBox] 时,self 是您的数据源对象的名称。

可以在此处找到此信息。

于 2013-07-25T19:57:20.840 回答