0

NSTextFieldNSButtonおよびNSView. に何かを入力しNSTextfieldてボタンを押すと、テキストが に描画されますNSView。これまでのところ、ビューを除いてすべてが接続され、機能しています。

ボタンを押すたびにテキストがビューに描画されるように、テキストとビューを接続するにはどうすればよいですか?

4

3 に答える 3

1

ボタンを押すたびにテキストがビューに描画されるように、テキストとビューを接続するにはどうすればよいですか?

ビューは独自の描画を行います。

ビューに描画する文字列を指定してから、表示が必要としてビューを設定する必要があります。これらは、ボタンを接続するアクションメソッドで行います。

まず、カスタム ビュー クラスには、表示する値 (この場合は文字列)のプロパティが必要です。アクション メソッド (通常はコントローラーオブジェクト上にある必要があります) から、ビュー オブジェクトにsetFoo:メッセージを送信します (プロパティに名前を付けたと仮定しますfoo)。これでジョブ 1 が処理されます。ビューには、表示する値が含まれています。

ジョブ 2 はさらに簡単です:値を含むsetNeedsDisplay:メッセージYESをビューに送信します。

それでおしまい。アクションメソッドは2行。

もちろん、ビューは自分自身を描画するので、実際に描画するにはカスタム ビューも必要なので、そのクラスにメソッドを実装する必要がありますdrawRect:それも短くなります。必要なことは、ストリング自体に描画するように指示することだけです。

于 2010-04-11T22:40:38.867 に答える
0

簡単にするために、これについては前に触れませんでしたが、このアプリには文字列を読み上げるための音声要素もあります。プログラムのこの側面は正常に動作するため、クラスに関するメッセージは無視してくださいSpeakAndDraw(実際には名前が間違っていて、speech メソッドのみが含まれており、描画については何も含まれていません)。

View.m

#import "View.h"


@implementation View

@synthesize stringToDraw;

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setAttributes];
        stringToDraw = @"Hola";
    }
    return self;
}

- (void)drawRect:(NSRect)dirtyRect {
    NSRect bounds = [self bounds];
    [self drawStringInRect:bounds];

}

- (void)setAttributes
{
    attributes = [[NSMutableDictionary alloc] init];
    [attributes setObject:[NSFont fontWithName:@"Helvetica"
                                          size:75]
                   forKey:NSFontAttributeName];

    [attributes setObject:[NSColor blackColor]
                   forKey:NSForegroundColorAttributeName];
}

- (void)drawStringInRect:(NSRect)rect
{
    NSSize strSize = [stringToDraw sizeWithAttributes:attributes];
    NSPoint strOrigin;
    strOrigin.x = rect.origin.x + (rect.size.width - strSize.width)/2;
    strOrigin.y = rect.origin.y + (rect.size.height - strSize.height)/2;
    [stringToDraw drawAtPoint:strOrigin withAttributes:attributes];
}

@end

SpeakerController.m

#import "SpeakerController.h"


@implementation SpeakerController

- (id)init
{
    speakAndDraw = [[SpeakAndDraw alloc] init];
    view = [[View alloc] init];
    [mainWindow setContentView:mainContentView];
    [mainContentView addSubview:view];
    return self;
}

- (IBAction)speakText:(id)sender
{
    [speakAndDraw setStringToSay:[text stringValue]];
    [speakAndDraw speak];
    [view setStringToDraw:[text stringValue]];
    [view setNeedsDisplay:YES];
    NSLog(@"%@", view.stringToDraw);
    NSLog(@"%@", [view window]);

}

@end
于 2010-04-13T00:16:54.543 に答える