J'ai créé une sous-classe de NSOutlineView et utilisé le code ci-dessous pour alterner les couleurs des lignes.NSOutlineView ne fait pas ce qu'il doit faire dans sa sous-classe
Fichier d'en-tête.
#import <Cocoa/Cocoa.h>
@interface MyOutlineView : NSOutlineView {
}
- (void) drawStripesInRect:(NSRect)clipRect;
@end
fichier de mise en œuvre.
#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
Mais le problème est que ce que le code est censé faire ne pas arriver à la vue Plan, le code est correct, mais dois-je connecter la vue Outline au code est d'une certaine façon?
Parfait! Tu es incroyable! Je me demandais si vous pouviez m'aider avec une dernière chose, comment je pourrais faire la ligne de la grille de couleur jaune au lieu de bleu. Je sais que je devrais changer les chiffres là où il est dit définir, mais de quoi aurais-je besoin pour le changer? Merci beaucoup! – Joshua
STRIPE_RED, STRIPE_GREEN et STRIPE_BLUE sont les valeurs RVB des couleurs. Si vous trouvez les valeurs RVB du jaune que vous voulez, changez ces définitions en conséquence, en gardant le /255.0 car elles sont évidemment représentées comme une décimale entre 0 et 1. –