2011-07-04 10 views
1

NSTableviewセルに線を斜めに描く方法はありますか?これを行うにはサンプルを投稿してください.Macの開発に新しいです。この問題で私を助けてください。特定のNSTableviewセルに斜めに線を描く

ありがとうございます.......

答えて

8

はい、簡単です。

あなたが実際にNSTableViewは、テキストを表示するために使用する細胞の種類であるNSTextFieldCellサブクラスを作成する必要があります。

クラスをサブクラス化すると、そのクラスの新しいバージョンが作成され、元のクラスに加えてすべてのことを行います。

これはXcode 4を使用しています.Xcode 3を使用している場合はお知らせください。 Xcodeで

ファイル]> [新規]> [新規ファイルを選択して、新しいファイルを作成... のObjective-Cクラスを選択するポップアップ表示シートで

New File

そして、を打ちました。です。

Objc class

それ我々が変更されたコピーを作ることになりますものですNSTextFieldCellのサブクラスで、作成します。ヒット次はです。

subclass

あなたが欲しいものとして保存することができますが、このチュートリアルの目的のために、MyDiagonalLinedTextFieldCellとして保存します。ヒット保存

saving

2つの新しいファイルがポップアップする必要があります。 .Mファイルに

files

クリックします。これは、クラス内のメソッドが何を行うかを示す実装ファイルです。 その内容は以下のようになります。init方法以下

// 
// 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 

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 ++) { 

} 

これは0に等しいintを行い、ループを実行するたびにカウントしたものに加えて、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をクリックします。 テーブルビューの行のセルを青色になるまでクリックします。 MyDiagonalLinedTextFieldCellbutton

変更クラスと入力してヒット:

blue cell

次に、そのように見える右サイドバーにボタンを押してください。

class change

は、今すぐあなたの労働の成果を実行して、楽しんでヒット!描画コードと

custom cell window

混乱あなたがしたい行の正確な種類を取得するまで。

ご不明な点がありましたらお気軽にお問い合わせください。

+0

ありがとうございました....続きを読む – Sonu

+0

大歓迎です。 – spudwaffle