objective-c - NSComboBox 中的奇怪错误 : selectItemAtIndex does not work correctly when using data source

标签 objective-c macos cocoa nscombobox

我在 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];
}

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

最佳答案

找到了!

您还需要像这样实现indexOfItemWithStringValue:

- (NSUInteger)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)aString
{
    return [self.temp indexOfObject:aString];
}

关于objective-c - NSComboBox 中的奇怪错误 : selectItemAtIndex does not work correctly when using data source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867020/

相关文章:

iphone - iOS 6 上的应用程序 View 向上移动 20 像素

python - 在 Mac Cocoa 应用程序中使用 Tkinter 框架

以编程方式添加的 iOS7 图像模糊

iphone - 多个 UILabels 显示修饰的 XML 标记

macos - MacOS Catalina 升级后 Go 程序无法运行

c++ - Qt MacOS - 正确的工作目录?

macos - 去掉 NSTouchBar 上的图标

ios - 如何从 uitableviewcell 显示 uidatepicker

ios - Swift 将字典数组传递给 NSMutableArray

macos - 有没有办法不显示 SwiftUI 生命周期 macOS 应用程序的窗口?