objective-c - tutorial - xcode interface builder




Modification des en-têtes de tableau sur Mac (2)

J'ai été capable de trouver des tutoriels sur la modification des en-têtes de table sur iOS en utilisant UITableView - mais je n'ai pas été en mesure de trouver des informations pour le développement mac. Est-ce que quelqu'un sait de bonnes ressources / étapes pour modifier l'apparence des tables?

Zach


Pour modifier l'apparence des en-têtes de table, vous devez sous-classer NSTableHeaderCell, effectuer votre propre dessin personnalisé dans l'une de ses méthodes de dessin, puis remplacer les cellules d'en-tête de chaque colonne par une instance de votre sous-classe.

Vous pouvez également trouver que vous devez sous-classer NSTableHeaderView pour dessiner l'espace any où aucune cellule d'en-tête n'est visible et pour remplacer le cornerView de la vue de table.

Cela devrait vous aider à démarrer:

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

Et voici un point de départ pour une sous-classe de 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

Code pour changer l'en-tête de colonne dans tableView:

NSString *title = @"Your Title";
NSTableColumn *yourColumn = self.tableView.tableColumns.lastObject;
        [yourColumn.headerCell setStringValue:title];




interface-builder