0

我有一个具有NSTextField,NSButtonNSView. 当我在 中输入NSTextfield内容并按下按钮时,我希望将文本绘制在NSView. 到目前为止,除了视图之外,我的所有东西都已连接并正常工作。

如何连接文本和视图,以便每次按下按钮时,都会将文本绘制到视图中?

4

3 回答 3

1

如何连接文本和视图,以便每次按下按钮时,都会将文本绘制到视图中?

视图自己绘制。

您需要为视图提供要绘制的字符串,然后将视图设置为需要显示。您将在将按钮连接到的操作方法中执行这些操作。

首先,您的自定义视图类需要具有将要显示的值(在本例中为字符串)的属性。从您的操作方法(通常应该在控制器对象上)向视图对象发送一条setFoo:消息(假设您将属性命名为foo)。这需要完成第一项工作:视图现在具有要显示的值。

工作二更简单:向视图发送消息setNeedsDisplay:带有值YES

而已。动作方法是两行。

当然,由于视图是自己绘制的,因此您还需要自定义视图来实际绘制,因此您需要在该类中实现drawRect:方法。它也会很短。您需要做的就是告诉字符串自己绘制

于 2010-04-11T22:40:38.867 回答
0

为简单起见,我之前没有提到这一点,但该应用程序还有一个语音元素来说出字符串。程序的这方面工作正常,所以只需忽略任何涉及SpeakAndDraw该类的消息(它实际上命名错误,只包括一个语音方法,与绘图无关)。

查看.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

扬声器控制器.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 回答