cocoa - 在特定的 NSTableview 单元格中绘制对角线

标签 cocoa nstableviewcell

有没有办法在 NSTableview 单元格中绘制对角线。您可以发布示例来执行此操作。我是 Mac 开发新手。请帮助我解决这个问题。

提前致谢......

最佳答案

是的,很容易。

您需要创建 NSTextFieldCell子类,它实际上是 NSTableView 用于显示文本的单元格类型。

对一个类进行子类化会创建该类的一个新版本,该版本可以完成原始类所做的所有工作,甚至更多。

这是使用 Xcode 4。如果您使用的是 Xcode 3,请告诉我。

在 Xcode 中,通过选择文件 > 新建 > 新文件...来创建一个新文件

New File

在弹出的工作表中选择Objective-C Class,然后点击下一步

Objc class

使其成为 NSTextFieldCell 的子类,我们将对其进行修改副本。点击下一步

subclass

您可以将其另存为您想要的任何内容,但出于本教程的目的,请将其另存为MyDiagonalLinedTextFieldCell。点击保存

saving

应该会弹出两个新文件。

files

单击.m 文件。这是说明类中的方法的用途的实现文件。 其内容应类似于以下内容:

//
//  MyDiagonalLinedTextFieldCell.m
//  CustomCell
//
//  Created by spudwaffle on 7/4/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "MyDiagonalLinedTextFieldCell.h"

@implementation MyDiagonalLinedTextFieldCell

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

@end

init方法下面添加一个drawInteriorWithFrame: inView:方法。 每次单元格需要在屏幕上渲染时,应用程序都会调用 drawInteriorWithFrame: inView: 方法。

您的代码现在应如下所示:

@implementation MyDiagonalLinedTextFieldCell

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

}

@end

您需要做的第一件事就是绘制一个标准的NSTextFieldCell。 这可以通过调用来完成:

[super drawInteriorWithFrame:cellFrame inView:controlView];

这会在程序想要的确切区域绘制一个正常的NSTextFieldCell

现在,我们需要绘制自定义线条。让我们将它们分开 5 像素,并将它们设置为 1 像素宽。 这需要一个 for 循环!

for (int i = 0; i < cellFrame.size.width/5; i ++) {

}

这使得 int 等于 0,每次循环运行时都会添加到该计数,并在 i 达到 的数量时停止需要绘制的线。

接下来,输入绘图代码来绘制线条。

for (int i = 0; i < cellFrame.size.width/5; i ++) {
        NSBezierPath *path = [NSBezierPath bezierPath];
        [path moveToPoint:NSMakePoint(i * 5, cellFrame.origin.y)];
        [path lineToPoint:NSMakePoint((i * 5) + 2, cellFrame.origin.y + cellFrame.size.height)];
        [[NSColor grayColor]set];
        [path setLineWidth:1];
        [path stroke];
}

这个:

  1. 创建一个 NSBezierPath,用于绘制线条和形状。
  2. 将路径的起点移动到单元格的底部边缘。
  3. 绘制一条线至单元格的上边缘。
  4. 将绘图颜色设置为灰色。
  5. 将绘图线宽设置为 1
  6. 画线。

由于 for 循环,它对每一行一遍又一遍地执行此操作。

这是已完成的 MyDiagonalLinedTextFieldCell.m 文件。您暂时无需担心 .h

#import "MyDiagonalLinedTextFieldCell.h"

@implementation MyDiagonalLinedTextFieldCell

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    [super drawInteriorWithFrame:cellFrame inView:controlView];
    for (int i = 0; i < cellFrame.size.width/5; i ++) {
        NSBezierPath *path = [NSBezierPath bezierPath];
        [path moveToPoint:NSMakePoint(i * 5, cellFrame.origin.y)];
        [path lineToPoint:NSMakePoint((i * 5) + 2, cellFrame.origin.y + cellFrame.size.height)];
        [[NSColor grayColor]set];
        [path setLineWidth:1];
        [path stroke];
    }
}

@end

现在,我们需要设置表格 View 中的单元格以使用此类。

单击您的 MainMenu.xib 文件。 单击表格 View 的一行中的单元格,直到其变成蓝色。

blue cell

然后,点击右侧栏中的按钮,如下所示: button

Class更改为MyDiagonalLinedTextFieldCell并按回车键。

class change

现在就开始吧,享受你的劳动成果!

custom cell window

修改绘图代码,直到获得所需的线条类型。

如有任何问题,请随时与我联系。

关于cocoa - 在特定的 NSTableview 单元格中绘制对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573269/

相关文章:

objective-c - 使用 objc_disposeClassPair()

ios - 调用异步 API 时如何等待某些操作完成

iphone - 检查 NSString 是否包含 iPhone 上常见的名字

ios - 如何向添加到 tableview 单元格的减号图像添加可访问性标签?

cocoa :核心数据+ NSTableView

ios - 无法拖动或移动自定义 NSWindow

macos - 将 struct ProcessSerialNumber 转换为 UnsafePointer<Void>

objective-c - 如何在 NSTableView 中选择一个 NSCell?

ios - 每次导航返回时如何管理单元格颜色样式

objective-c - 如何从 cocoa 的 super View 中删除imageview?