1

セルが選択されているときにNSTextFieldCellの背景色を変更しようとしています。

これはコードです:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    [super drawWithFrame:cellFrame inView:controlView];

    if([self isHighlighted]) {
        [self setBackgroundColor:[NSColor whiteColor]]; 
    }   
}

ただし、選択した行は常に青色です。私は何かが足りないのですか?

:これはiOSアプリケーションではありません。

よろしくお願いします。

4

2 に答える 2

5

これは私が以前考えていたように簡単ではありません:NStableviewにはいくつかの問題があります。次のようなものを使用している場合:

[destinationsListForSaleTableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

あなたはしなければならない

 - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
 if ([[aTableView selectedRowIndexes] containsIndex:rowIndex]) {
    [aCell setBackgroundColor: [NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1]];

} else [aCell setBackgroundColor: [NSColor colorWithDeviceRed:0.52 green:0.54 blue:0.70 alpha:1]];
[aCell setDrawsBackground:YES];

}  

uセルがカスタムでない場合は、これで十分です。高さと内部を変更する場合は、より複雑にする必要があります。

あなたの選択のために選択スタイルテーブルを保管してください。セルサブクラス:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
return nil;
//[NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1];
}

 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if ([self isHighlighted]) {
    [[NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1] set];
    cellFrame.origin.x -= 1;
    cellFrame.origin.y -= 1;
    cellFrame.size.height += 2;
    cellFrame.size.width += 3;

    NSRectFill(cellFrame);

}
[super drawWithFrame:cellFrame inView:controlView];
}

なぜ詰め物のサイズを変えるのかと聞かれますか?バックグラウンドを使用する場合、アップルは小さなボックスを残します。これは異なる色になります。

于 2011-05-08T09:29:36.803 に答える
-1

そのようにしないでください。代わりに、-tableView:cellForRowAtIndexPath:でセルを作成するときに、セルの「selectedBackgroundView」プロパティを、セルが選択されたときに背景になるビューに設定します。これは、背景色が付いた単なる古いUIViewにすることができます。+ backgroundViewForTableCell:というメソッドを持つカテゴリをUIViewに作成しました。これは、まさにそれを実行します...ビューをインスタンス化し、その背景色を希望の色に設定します。セルを作成するときは、次のように使用します。

cell.selectedBackgroundView = [UIView backgroundViewForTableCell:cell];

セルがタップされたときに実行したいもう1つのことは、セル内のテキストの色を設定することです。背景色が比較的暗い場合は、たとえば、テキストの色を黒から白に変更することをお勧めします。

于 2011-03-05T17:31:40.380 に答える