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