objective-c - 在 Mac 上修改表格标题

标签 objective-c cocoa macos interface-builder

我已经能够找到有关使用 UITableView 在 iOS 上修改表格标题的教程 - 但无法找到任何有关 mac 开发的信息。有谁知道修改表格外观的任何好的资源/步骤?

扎克

最佳答案

要更改表格标题的显示方式,您需要将 NSTableHeaderCell 子类化,在其中一种绘图方法中执行您自己的自定义绘图,然后将每列的标题单元格替换为您的子类的实例。

您可能还会发现您需要子类化 NSTableHeaderView 以绘制任何标题单元格不可见的空间,并替换 TableView 的 cornerView

这应该让你开始:

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

这是 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

关于objective-c - 在 Mac 上修改表格标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4753282/

相关文章:

objective-c - 链接到开发者的应用程序

iphone - UIView.subviews 和 [NSView subviews] 之间的行为差​​异

macos - 该应用程序无法启动,因为它无法找到或加载Qt平台插件 "cocoa"

C++ if语句编码错误

ios - NSOperationQueue 和 NSURLSession 有什么区别?

iOS - ScopeBar 与 TabBarController 中的 UISearchController 中的 SearchBar 重叠

objective-c - 使用未解析的标识符将 Objective-C 转换为 Swift 3.1 错误

swift - NSBezierCurve 不绘制线条

xcode - Mac SDK : using latest SDK but ensuring backwards compatibility with earlier deployment target

c++ - 为什么 SDL 在 Mac 上比 Linux 上慢很多?