1

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

前もって感謝します.......

4

2 に答える 2

9

はい、簡単に。

テキストを表示するために実際に使用するセルのタイプであるサブクラスを作成する必要があります。NSTextFieldCellNSTableView

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

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

Xcode で、[File] > [New] > [New File... ] を選択して新しいファイルを作成します。

新しいファイル

ポップアップするシートで、Objective-C Classを選択し、 Nextを押します。

オブジェクトクラス

のサブクラスにしNSTextFieldCellます。これは、変更されたコピーを作成するものです。[次へ] をクリックします。

サブクラス

好きなように保存できますが、このチュートリアルではMyDiagonalLinedTextFieldCellとして保存します。[保存] をクリックします。

保存

2 つの新しいファイルがポップアップ表示されます。

ファイル

.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ます。0i

次に、描画コードを挿入して線を描画します。

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。青色に変わるまで、テーブル ビューの行のセルをクリックします。

ブルーセル

次に、右側のバーにある次のようなボタンを押します。 ボタン

Classを に変更し、MyDiagonalLinedTextFieldCellEnter キーを押します。

クラスチェンジ

今すぐ実行して、あなたの労働の成果を楽しんでください!

カスタム セル ウィンドウ

必要な正確な種類の線が得られるまで、描画コードをいじります。

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

于 2011-07-04T23:16:54.003 に答える