Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在特定NSTableview单元中沿对角线绘制线_Cocoa_Nstableviewcell - Fatal编程技术网

Cocoa 在特定NSTableview单元中沿对角线绘制线

Cocoa 在特定NSTableview单元中沿对角线绘制线,cocoa,nstableviewcell,Cocoa,Nstableviewcell,有没有一种方法可以在NSTableview单元格中绘制对角线。请发布示例来完成此操作。我是Mac开发的新手。请在这个问题上帮助我 提前感谢……是的,很容易 您需要创建NSTextFieldCell的子类,它实际上是NSTableView用于显示文本的单元格类型 子类化一个类将创建该类的一个新版本,该版本完成了原始类所做的所有事情,并增加了更多内容 这是使用Xcode 4。如果您使用的是Xcode 3,请告诉我 在Xcode中,通过选择文件>新建>新建文件… 在弹出的工作表中选择Objectiv

有没有一种方法可以在NSTableview单元格中绘制对角线。请发布示例来完成此操作。我是Mac开发的新手。请在这个问题上帮助我

提前感谢……

是的,很容易

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

子类化一个类将创建该类的一个新版本,该版本完成了原始类所做的所有事情,并增加了更多内容

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

在Xcode中,通过选择文件>新建>新建文件…

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

使其成为
NSTextFieldCell
的子类,这就是我们将要制作的修改副本。点击下一步

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

应该会弹出两个新文件

单击.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 ++) {

}
这:

  • 创建用于绘制线条和形状的
    NSBezierPath
  • 将路径的起点移动到单元格的下边缘
  • 在单元格的上边缘绘制一条线
  • 将图形颜色设置为灰色
  • 将绘图线宽设置为
    1
  • 划清界限
  • 由于
    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
    
    #导入“MyDiagonalLinedTextFieldCell.h”
    @MyDiagonalLinedTextFieldCell的实现
    -(id)init
    {
    self=[super init];
    如果(自我){
    //这里是初始化代码。
    }
    回归自我;
    }
    -(无效)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView{
    [super drawInteriorWithFrame:cellFrame inView:controlView];
    对于(int i=0;i
    现在,我们需要在表视图中设置单元格以使用该类

    单击
    main菜单.xib
    文件。 单击表格视图行中的单元格,直到其变为蓝色

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

    类更改为
    MyDiagonalLinedTextFieldCell
    ,然后按enter键

    现在快跑,享受你的劳动成果吧

    搞乱图形代码,直到得到所需的确切类型的线

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

    是的,很容易

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

    子类化一个类将创建该类的一个新版本,该版本完成了原始类所做的所有事情,并增加了更多内容

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

    在Xcode中,通过选择文件>新建>新建文件…

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

    使其成为
    NSTextFieldCell
    的子类,这就是我们将要制作的修改副本。点击下一步

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

    应该会弹出两个新文件

    单击.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 ++) {
    
    }
    
    这:

  • 创建用于绘制线条和形状的
    NSBezierPath
  • 将路径的起点移动到单元格的下边缘
  • 在单元格的上边缘绘制一条线
  • 将图形颜色设置为灰色
  • 将绘图线宽设置为
    1
  • 划清界限
  • 由于
    for
    循环,它会对每一行反复执行此操作

    这是t