Отображение строки NSSt в пользовательском представлении - PullRequest
0 голосов
/ 11 апреля 2010

У меня есть интерфейс с NSTextField, NSButton и NSView. Когда я набираю что-то в NSTextfield и нажимаю кнопку, я хочу, чтобы текст рисовался в NSView. Пока у меня все подключено и работает, кроме просмотра.

Как можно связать текст и вид, чтобы при каждом нажатии кнопки текст выводился на вид?

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

Как можно связать текст и вид, чтобы при каждом нажатии кнопки текст выводился в вид?

Виды выполняют свои собственные чертежи.

Вам нужно дать представлению строку для рисования, а затем установить представление как нуждающееся в отображении.Вы будете делать это в методе action , к которому вы подключаете кнопку.

Во-первых, ваш класс пользовательского представления должен иметь свойство для значения (строка, в данном случае), которую он собирается отобразить.Из вашего метода действия, который обычно должен быть на объекте controller , отправьте объекту представления сообщение setFoo: (при условии, что вы назвали свойство foo).Это касается первого задания: теперь у представления есть значение для отображения.

Второе задание еще проще: отправьте представлению a setNeedsDisplay: сообщение со значением YES.

Вот и все.Метод действия состоит из двух линий.

Конечно, поскольку представления рисуют сами, вам также нужно, чтобы пользовательский вид фактически рисовал , поэтому вам необходимо реализовать метод drawRect: в этом классе.Это тоже будет коротким;все, что вам нужно сделать, это указать строке нарисовать себя .

0 голосов
/ 13 апреля 2010

Для простоты я не упомянул об этом раньше, но в приложении также есть речевой элемент, чтобы произносить строку. Этот аспект программы работает нормально, поэтому просто игнорируйте все сообщения, относящиеся к классу 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
0 голосов
...