2011-07-04 61 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