PDA

View Full Version : custom cells in tableview




medasmx
Jun 30, 2009, 11:10 AM
I have been working on this custom cells for table view for a while, through various posts. The code below works and does the following...creates a 3x3 table view of gray cells. There is a pop-up button that will print text ("jimmy" here), depending on which column is selected (1 through 3). Appreciate prior input of Kainjow.

Here is the code for the custom cells...


#import "MyCell.h"

@implementation MyCell

-(void)prepareAttributes
{
attributes=[[NSMutableDictionary alloc]init];
[attributes setObject:[NSFont fontWithName:@"Helvetica" size:20] forKey:NSFontAttributeName];
[attributes setObject:[NSColor blackColor] forKey:NSForegroundColorAttributeName];
}

- (id)initWithFrame:(NSRect)frameRect {
self = [super initWithFrame:frameRect];

if (!self) return nil;
[self prepareAttributes];
string=@"Jimmy";
return self;
}

-(void)dealloc
{
[string release];
[super dealloc];
}

-(NSString*)string
{
return string;
}

-(void)setString:(NSString*)c
{
c=[c copy];
[string release];
string=c;
}

-(void)drawStringCenteredIn:(NSRect)cellFrame
{
NSPoint textPoint;

textPoint.x = cellFrame.origin.x + 5;
textPoint.y = cellFrame.origin.y;

[string drawAtPoint:textPoint withAttributes:attributes];
}


-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView
{
[[NSColor grayColor]set];
NSRectFill(NSInsetRect(cellFrame,4,4));

[self drawStringCenteredIn:cellFrame];
}

@end


Here is the code for the appcontroller...


#import "AppController.h"
#import "MyCell.h"

@implementation AppController

-(void)awakeFromNib
{
data=[[NSArray alloc]initWithObjects:@"1",@"2",@"3",nil];
myCell=[[[MyCell alloc]init]autorelease];
NSTableColumn*column=[tv tableColumnWithIdentifier:@"columnOne"];
[column setDataCell:myCell];
NSTableColumn*column2=[tv tableColumnWithIdentifier:@"columnTwo"];
[column2 setDataCell:myCell];
NSTableColumn*column3=[tv tableColumnWithIdentifier:@"columnThree"];
[column3 setDataCell:myCell];
[tv setRowHeight:100];
}

-(int)numberOfRowsInTableView:(NSTableView *)tv
{
return [data count];
}

-(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
return [data objectAtIndex:row];
}

-(IBAction)asmbutton1:(id)sender;
{
NSString*buttonString=[(NSPopUpButton*)sender titleOfSelectedItem];
NSString*mySecondString=@"jimmy";
NSString*myThirdString=@"";
mySecondCell=[[[MyCell alloc]init]autorelease];
myThirdCell=[[[MyCell alloc]init]autorelease];
[mySecondCell setString:mySecondString];
[myThirdCell setString:myThirdString];

NSTableColumn*column=[tv tableColumnWithIdentifier:@"columnOne"];
NSTableColumn*column2=[tv tableColumnWithIdentifier:@"columnTwo"];
NSTableColumn*column3=[tv tableColumnWithIdentifier:@"columnThree"];

if ([buttonString isEqualToString:@"1"]) {
[column setDataCell:mySecondCell];
[column2 setDataCell:myThirdCell];
[column3 setDataCell:myThirdCell];}

else if ([buttonString isEqualToString:@"2"]) {
[column2 setDataCell:mySecondCell];
[column setDataCell:myThirdCell];
[column3 setDataCell:myThirdCell];}

else {[column3 setDataCell:mySecondCell];
[column setDataCell:myThirdCell];
[column2 setDataCell:myThirdCell];}
}

@end


What I really want to do is to have a pop-up 1-9 and be able to put the text in one specific cell, not just the whole column. I read some about dataCellForRow:, but haven't figured it out yet. Any help is appreciated. Thanks

Adam