2011-07-04 82 views

回答

8

是的,很容易。

你需要创建一个子类的NSTextFieldCell这实际上是细胞的NSTableView用于显示文本的类型。

为类创建子类会创建该类的新版本,该类会完成原始类的所有功能以及更多功能。

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

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

New File

在弹出的单选Objective-C类并击中下一步

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 

现在,我们需要设置表视图中的单元格来使用这个类。

点击您的MainMenu.xib文件。 单击表格视图的一行中的单元格,直到它变成蓝色。

blue cell

然后,点击按钮在右边栏,看起来像这样: button

变化的类以MyDiagonalLinedTextFieldCell并按下回车键。

class change

现在点击运行,并享受自己的劳动成果!

custom cell window

惹的绘制代码,直到你得到确切的那种线条的你想要的。

随时与我联系的任何问题。

+0

感谢它帮了我很多...... – Sonu

+0

非常欢迎。 – spudwaffle