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」のデータ ソースはこのプロトコルを実装していないため、正しく機能しません。

上記のセレクターで [selfomboBox:_comboBox] と言うとき、self はデータ ソース オブジェクトの名前であることに注意してください。

この情報はここにあります。

于 2013-07-25T19:57:20.840 に答える