1

私は iOS 開発者で、最近は MAC OSX 用のデスクトップ APP をプログラミングしています。私はまだ OSX のビューのコンポーネントについてあまり経験がないので、ばかげた、または簡単な質問かもしれませんが、この問題について少し調べてみましたが、まだ解決策が見つかりません。

問題は次のとおりです。

NSPopover で使用される Content ViewController のビューとして使用される NSView のカスタム特殊化があります。

「PopoverBackgroundView」と呼んでいるこのビュー内で、drawRect 内にこの赤い背景をペイントし、別のマイナー rect を計算して、この灰色のような色でペイントしました。コードは次のとおりです。

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor colorWithDeviceRed:174/255.0 green:72/255.0 blue:72/255.0 alpha:1.0] setFill];
    NSRectFill(dirtyRect);

    [[NSColor colorWithDeviceRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0] setFill];
    NSRectFill(NSMakeRect(BORDER_WIDTH, BORDER_WIDTH, dirtyRect.size.width - 2*BORDER_WIDTH, dirtyRect.size.height - 2*BORDER_WIDTH));
}

そのため、PopoverBackgroundView.mプログラムで NSComboBox を作成しています。このコンボボックスには 1 から 10 の数字が入ります。割り当てると、すべて問題ないように見えます。

ここに画像の説明を入力

問題は、コンボボックス内のオプションを選択した後、背景がどういうわけか「消えて」透明になったことです。わかりませんが、次のようになります。

ここに画像の説明を入力

何かを選択した直後に表示される、NSComboBox の周りの赤いフレーム (ビューの背景色) に注目してください。

これは、コンボボックスを割り当てて初期化するコードです。

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

         (...)

        self.comboBox = [[NSComboBox alloc] initWithFrame:CGRectMake(15, frame.size.height - 55, 90, 25)];
        self.comboBox.delegate = self;
        [self.comboBox setDrawsBackground:NO];
        [self.comboBox setSelectable:YES];
        [self.comboBox setEditable:NO];

        for (int i = 1; i<=10; i++)
        {
            NSString *mystr = [NSString stringWithFormat:@"%d", i];
            [self.comboBox addItemWithObjectValue:mystr];
        }

        [self addSubview:self.comboBox];

    }

    return self;
}

この「選択した背景」を「修正」するにはどうすればよいですか? 私が望むのは、選択された状態が通常の状態と同じであることです。つまり、選択後でも、コンボボックスは常に最初の画像のようになるはずです。

割り当てコードに問題はありませんか?何かのミッション?私が使用していない、または初期化していないプロパティだけだと本当に考えていますが、まだ見つけることができませんでした。

前もって感謝します、

4

1 に答える 1