The Omni Group
These forums are now read-only. Please visit our new forums to participate in discussion. A new account will be required to post in the new forums. For more info on the switch, see this post. Thank you!

Go Back   The Omni Group Forums > Community > Omni Lounge
FAQ Members List Calendar Search Today's Posts Mark Forums Read

NSTableView Cell background image weird problem Thread Tools Search this Thread Display Modes
I am trying to display Transparent image for Normal cell and the Opaque color, Green for the Selected cell.

I could manage to do this way. Normal case happens well and once selected Green colored image is shown. But once I select other one then the Green color image in the previous cell remains same. How can I resolve this.

I can't upload images thats why I am giving the details like this

Normal Normal Normal
Normal -> Select 2 -> Highlight -> Select 3 -> Highlight
Normal Normal Highlight

This is with only the problem for Transparent image. If it is opaque then no issue.

Here is my sample code
@implementation CustomTableView

- (void)awakeFromNib
	NSLog(@"CustomTableView awakeFromNib");
	[[self enclosingScrollView] setDrawsBackground:NO];

- (void)drawBackgroundInClipRect:(NSRect)clipRect
	NSLog(@"CustomTableView drawBackgroundInClipRect");

#pragma mark -
#pragma mark Selection Highlighting

- (id)_highlightColorForCell:(NSCell *)cell
	// we need to override this to return nil
	// or we'll see the default selection rectangle when the app is running 
	// in any OS before leopard
	// you can also return a color if you simply want to change the table's default selection color
    return nil;


@implementation CustomTableCell
- (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlView
	NSLog(@"CustomTableCell drawInteriorWithFrame");
	NSImage *bgImage = [NSImage imageNamed:@"DefaultCell"];
	// Make attributes for our strings
	NSMutableParagraphStyle * aParagraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
	[aParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
	[aParagraphStyle setAlignment:NSCenterTextAlignment];
	// Title attributes: system font, 14pt, black, truncate tail
	NSMutableDictionary * aTitleAttributes = [[[NSMutableDictionary alloc] initWithObjectsAndKeys:
											   [NSColor blackColor],NSForegroundColorAttributeName,
											   [NSFont systemFontOfSize:21.0],NSFontAttributeName,
											   aParagraphStyle, NSParagraphStyleAttributeName,
											   nil] autorelease];
	// Make a Title string
	NSString *	aTitle = [self stringValue];//[NSString stringWithString:@"Title"];
	// get the size of the string for layout
	//NSSize		aTitleSize = [aTitle sizeWithAttributes:aTitleAttributes];

	// Icon box: center the icon vertically inside of the inset rect
	NSRect		anIconBox = NSMakeRect(anInsetRect.origin.x,
									   anInsetRect.origin.y + anInsetRect.size.height*.5 - anIconSize.height*.5,
	NSLog(@"CellFrame:[%f %f] [%f %f]", theCellFrame.origin.x, theCellFrame.origin.y, theCellFrame.size.width, theCellFrame.size.height);
	NSRect anIconBox = theCellFrame;
	NSRect aTitleBox = NSMakeRect(theCellFrame.origin.x, 
								  theCellFrame.origin.y + theCellFrame.size.height/2-10,

	if(	[self isHighlighted])
		// if the cell is highlighted, draw the text white
		[aTitleAttributes setValue:[NSColor whiteColor] forKey:NSForegroundColorAttributeName];
		bgImage = [NSImage imageNamed:@"FocusedCell"];
		// if the cell is not highlighted, draw the title black and the subtile gray
		[aTitleAttributes setValue:[NSColor orangeColor] forKey:NSForegroundColorAttributeName];
	// Draw the icon
	[bgImage drawInRect:anIconBox fromRect:NSZeroRect operation:NSCompositePlusLighter fraction:1.0];
	// Draw the text
	[aTitle drawInRect:aTitleBox withAttributes:aTitleAttributes];

@implementation TableViewController

- (id)init
	NSLog(@"TableViewController init");
	self = [super init];
	if(self) {
		mItems = [[NSArray arrayWithObjects:@"Value1", @"Value2", nil] retain];
	return self;

- (void)awakeFromNib
	NSLog(@"TableViewController awakeFromNib");
	// set the custom cell as the table view's cell class
	CustomTableCell * aCustomCell = [[[CustomTableCell alloc] init] autorelease];
	[[mTableView tableColumnWithIdentifier:@"theTableColumn"] setDataCell:aCustomCell];
	[mTableView setRowHeight:50.0f];

#pragma mark -
#pragma mark NSTableView Data Source Methods
- (int)numberOfRowsInTableView:(NSTableView *)theTableView
	NSLog(@"Tableviewcontroller numberOfRowsInTableView");
	return [mItems count];

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
	NSLog(@"Tableviewcontroller objectValueForTableColumn");
	return [mItems objectAtIndex:row];


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Similar Threads
Thread Thread Starter Forum Replies Last Post
Weird style problem, transparent background JulienM OmniFocus 1 for Mac 1 2013-03-03 06:39 AM
Background Image - How to stop tiling? mockman OmniOutliner 3 for Mac 0 2012-06-11 09:17 PM
How can I set Transparancy on background for a PNG image export? Eumenides OmniGraffle General 2 2011-09-16 08:16 AM
Background image for ipad version Hughjc OmniGraffle for iPad 2 2010-08-03 10:15 AM
Full image background for canvases hardcoreUFO OmniGraffle General 0 2007-09-11 12:41 PM

All times are GMT -8. The time now is 04:43 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2020, vBulletin Solutions, Inc.