Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying Table Headers on Mac

I've been able to find tutorials on modifying the table headers on iOS using UITableView - but havent been able to find any info for mac development. Does anyone know of any good resources / steps to modify the appearance of tables?

Zach

like image 553
Zakman411 Avatar asked Jan 20 '11 22:01

Zakman411


People also ask

How do you edit a table on a Mac?

Change the look of a table: Click the table, then use the controls in the Table tab of the sidebar to make changes, such as adding a table title or outline.

How do I Format a table in Mac?

Select the cells or table you want to format. In the Format sidebar, click the Cell tab. Click the Data Format pop-up menu, then choose Create Custom Format. Type a name for your format, then click the Type pop-up menu and choose Date & Time.

How do I edit a table of contents in pages for Mac?

Click Edit at the top of the sidebar, then select the paragraph styles you want to include. Place the insertion point where you want the table of contents to appear, then do one of the following: Add a TOC for the whole document: Click the Insert Table of Contents button at the bottom of the Table of Contents sidebar.


1 Answers

To change how the table headers appear you need to subclass NSTableHeaderCell, perform your own custom drawing in one of its drawing methods, then replace the header cells of each column with an instance of your subclass.

You may also find that you need to subclass NSTableHeaderView to draw the any space where no header cells are visible, and to replace the cornerView of the table view.

This should get you started:

for (NSTableColumn *column in [tableView tableColumns]) {
   [column setHeaderCell:
      [[[MyHeaderCell alloc]
                      initTextCell:[[column headerCell] stringValue]]
                      autorelease]];
}

And here’s a starting point for a subclass of NSTableHeaderCell:

@interface MyHeaderCell : NSTableHeaderCell
{
}
- (void)drawWithFrame:(CGRect)cellFrame
          highlighted:(BOOL)isHighlighted
               inView:(NSView *)view;
@end

@implementation MyHeaderCell

- (void)drawWithFrame:(CGRect)cellFrame
          highlighted:(BOOL)isHighlighted
               inView:(NSView *)view
{
   CGRect fillRect, borderRect;
   CGRectDivide(cellFrame, &borderRect, &fillRect, 1.0, CGRectMaxYEdge);

   NSGradient *gradient = [[NSGradient alloc]
      initWithStartingColor:[NSColor whiteColor]
                endingColor:[NSColor colorWithDeviceWhite:0.9 alpha:1.0]];
   [gradient drawInRect:fillRect angle:90.0];
   [gradient release];

   if (isHighlighted) {
      [[NSColor colorWithDeviceWhite:0.0 alpha:0.1] set];
      NSRectFillUsingOperation(fillRect, NSCompositeSourceOver);
   }

   [[NSColor colorWithDeviceWhite:0.8 alpha:1.0] set];
   NSRectFill(borderRect);

   [self drawInteriorWithFrame:CGRectInset(fillRect, 0.0, 1.0) inView:view];
}

- (void)drawWithFrame:(CGRect)cellFrame inView:(NSView *)view
{
   [self drawWithFrame:cellFrame highlighted:NO inView:view];
}

- (void)highlight:(BOOL)isHighlighted
        withFrame:(NSRect)cellFrame
           inView:(NSView *)view
{
   [self drawWithFrame:cellFrame highlighted:isHighlighted inView:view];
}

@end
like image 62
Todd Yandell Avatar answered Oct 29 '22 21:10

Todd Yandell