Hi,
I am trying to display custom image and the attributed text into the
TableHeaderview. For this I am retrieving the HeaderCell of each
TableColumn
and setting its image and attributed text. Then I found out If I set
image
first and then text next, only attributed text shown with the default
headerview background. If the Image is set after Text then
Background image
overlaps the text.
I am overriding NSTableView and doing two things.
1. setDrawsBackground:NO
2. Invoking empty drawBackgroundInClipRect:clipRect.
Here is my code.
- (void)setColumnHeaderOf:(id)identifier image:(NSImage*)image title:(
NSString*)title
{
NSTableColumn *column=[self tableColumnWithIdentifier:identifier];
[[column headerCell] setCellAttribute:NSCellHasImageOnLeftOrBottom to:
NSImageBelow];
[[column headerCell] setImage:image];
NSMutableAttributedString *attributedString =
[[NSMutableAttributedString
alloc] initWithString:title];
NSMutableParagraphStyle * aParagraphStyle = [[[NSMutableParagraphStyle
alloc] init] autorelease];
[aParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
[aParagraphStyle setAlignment:NSCenterTextAlignment];
CGFloat dividingFactor = 255.0f;
NSMutableDictionary * aTitleAttributes = [[[NSMutableDictionary alloc]
initWithObjectsAndKeys:
[NSFont fontWithName:CP_FONT_NAME size:[NSFont systemFontSize]],
NSFontAttributeName,
aParagraphStyle, NSParagraphStyleAttributeName,
nil] autorelease];
[aTitleAttributes setValue:[NSColor colorWithDeviceRed:(246/
dividingFactor)
green:(204/dividingFactor) blue:(37/dividingFactor) alpha:1.0f]
forKey:
NSForegroundColorAttributeName];
[attributedString addAttributes:aTitleAttributes range:NSMakeRange(0,
[attributedString length])];
[[column headerCell] setAttributedStringValue:attributedString];
[attributedString release];
}
- (void)awakeFromNib
{
NSLog(@"KBCustomTableView awakeFromNib");
[[self enclosingScrollView] setDrawsBackground:NO];
NSRect frameRect = [[self headerView] frame];
[[self headerView] setFrameSize:NSMakeSize(frameRect.size.width, 30)];
[self setColumnHeaderOf:@"Column1" image:[NSImage
imageNamed:@"ColHdr1"]
title:@"Column1"];
[self setColumnHeaderOf:@"Column2" image:[NSImage
imageNamed:@"ColHdr2"]
title:@"Column2"];
[self setColumnHeaderOf:@"Column3" image:[NSImage
imageNamed:@"ColHdr3"]
title:@"Column3"];
}
- (void)drawBackgroundInClipRect:(NSRect)clipRect
{
NSLog(@"KBCustomTableView drawBackgroundInClipRect");
//[super drawBackgroundInClipRect:clipRect];
}
Thanks in advance.
Regards
symadept
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden