Ich habe eine Unterklasse von NSOutlineView erstellt und den folgenden Code verwendet, um die Zeilenfarben zu wechseln.NSOutlineView nicht tun, was es in seiner Unterklasse tun sollte
Header-Datei.
#import <Cocoa/Cocoa.h>
@interface MyOutlineView : NSOutlineView {
}
- (void) drawStripesInRect:(NSRect)clipRect;
@end
Implementierungsdatei.
#import "MyOutlineView.h"
// RGB values for stripe color (light blue)
#define STRIPE_RED (237.0/255.0)
#define STRIPE_GREEN (243.0/255.0)
#define STRIPE_BLUE (254.0/255.0)
static NSColor *sStripeColor = nil;
@implementation MyOutlineView
// This is called after the table background is filled in,
// but before the cell contents are drawn.
// We override it so we can do our own light-blue row stripes a la iTunes.
- (void) highlightSelectionInClipRect:(NSRect)rect {
[self drawStripesInRect:rect];
[super highlightSelectionInClipRect:rect];
}
// This routine does the actual blue stripe drawing,
// filling in every other row of the table with a blue background
// so you can follow the rows easier with your eyes.
- (void) drawStripesInRect:(NSRect)clipRect {
NSRect stripeRect;
float fullRowHeight = [self rowHeight] + [self intercellSpacing].height;
float clipBottom = NSMaxY(clipRect);
int firstStripe = clipRect.origin.y/fullRowHeight;
if (firstStripe % 2 == 0)
firstStripe++; // we're only interested in drawing the stripes
// set up first rect
stripeRect.origin.x = clipRect.origin.x;
stripeRect.origin.y = firstStripe * fullRowHeight;
stripeRect.size.width = clipRect.size.width;
stripeRect.size.height = fullRowHeight;
// set the color
if (sStripeColor == nil)
sStripeColor = [[NSColor colorWithCalibratedRed:STRIPE_RED
green:STRIPE_GREEN
blue:STRIPE_BLUE
alpha:1.0] retain];
[sStripeColor set];
// and draw the stripes
while (stripeRect.origin.y < clipBottom) {
NSRectFill(stripeRect);
stripeRect.origin.y += fullRowHeight * 2.0;
}
}
@end
Aber das Problem ist, dass, was der Code tun soll geschieht nicht in die Gliederungsansicht, der Code korrekt ist, aber muss ich die Gliederungsansicht, um den Code zu verbinden ist eine Möglichkeit?
Perfekt! Du bist fantastisch! Ich frage mich nur, ob du mir mit 1 letzten Sache helfen könntest, wie würde ich die Gitterlinienfarbe Gelb statt Blau machen. Ich weiß, dass ich die Zahlen ändern müsste, wo es sagt, aber was würde ich ändern müssen? Danke sehr sehr! – Joshua
STRIPE_RED, STRIPE_GREEN und STRIPE_BLUE sind die RGB-Werte der Farben. Wenn Sie die RGB-Werte des gewünschten Gelbs finden, ändern Sie diese entsprechend, und behalten Sie /255.0 bei, da sie offensichtlich als Dezimalzahl zwischen 0 und 1 dargestellt werden. –