我的界面有NSTextField
,NSButton
和NSView
。当我在NSTextfield
中输入内容并按下按钮时,我希望在NSView
中绘制文字。到目前为止,除了视图外,我已将所有内容连接起来并正常工作
如何连接文本和视图,以便每次按下按钮时,文本都会被绘制到视图中?
答案 0 :(得分:1)
如何连接文本和视图,以便每次按下按钮时,文本都会被绘制到视图中?
视图自己绘制。
您需要为视图提供要绘制的字符串,然后将视图设置为需要显示。您可以使用按钮连接的action方法执行此操作。
首先,您的自定义视图类需要为其显示的值(在本例中为字符串)具有property。从您的操作方法(通常应该在controller对象上),向视图对象发送setFoo:
消息(假设您将属性命名为foo
)。这需要处理第一项工作:视图现在具有显示的值。
工作二更容易:发送视图a setNeedsDisplay:
message,其值为YES
。
就是这样。动作方法有两行。
当然,由于视图会自行绘制,因此您还需要自定义视图实际绘制,因此您需要在该类中实现the drawRect:
method。它也会很短;您需要做的就是tell the string to draw itself。
答案 1 :(得分:0)
答案 2 :(得分:0)
为了简单起见,我之前没有提到过这个,但应用程序也有一个语音元素来说出字符串。程序的这个方面工作正常,所以只需忽略涉及SpeakAndDraw
类的任何消息(它实际上是错误的,只包括一个语音方法,不包括绘图)。
<强> 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