objective-c用变量绘制

时间:2012-11-30 22:07:15

标签: objective-c variables drawrect

我只是试着理解如何将值从AppDelegate中的文本字段传递到我的NSView子类“ViewController”。我真的不明白。我是Objective-c的新手,我开始感到沮丧。请不要告诉我读书。我有Hillegass COCOA编程,即使在那里我也找不到答案。叫我相当白痴我可以处理那个,只要我得到那些东西...... 我只是尝试通过输入变量 balkenHoehe 设置矩形高度:

我的AppDelegate .h:

#import <Cocoa/Cocoa.h>  
@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *eingabeText;

- (IBAction)pushButton:(NSButton *)sender;

@end

我的AppDelegate .m:

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"did launch");
}

- (IBAction)pushButton:(NSButton *)sender {

    NSLog(@"Button pushed");
    double number;

    number = [_eingabeText doubleValue]; //input by textfield

    CustomView *hoehe = [[CustomView alloc] init];
    [hoehe setBalkenHoehe:number];

}
@end

我的CustomView .h:

#import <Cocoa/Cocoa.h>

@interface CustomView : NSView
{
   double balkenHoehe;
}

-(double) balkenHoehe;
-(void) setBalkenHoehe:(double)abalkenHoehe;
@end

我的CustomView .m:

#import "CustomView.h"

@implementation CustomView

//********************************
-(void) setBalkenHoehe:(double)abalkenHoehe
{
    balkenHoehe = abalkenHoehe;
    [self setNeedsDisplay:YES];
}

//********************************
-(double)balkenHoehe
{
return balkenHoehe;

}

//********************************
- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {

    [self setBalkenHoehe:10]; //initial hight at start


    }
    return self;
}

//********************************
- (void)drawRect:(NSRect)rect
{
    NSRect bounds = [self bounds];
    float fieldWith = bounds.size.width / 3.0;
    float fieldHeight = bounds.size.height / 3.0;


        //background
    NSRect hintergrundRect =
    hintergrundRect = NSMakeRect(bounds.origin.x, bounds.origin.y,
                             bounds.size.width, bounds.size.height);
    [[NSColor grayColor] set];
    [NSBezierPath fillRect:hintergrundRect];

        //Diagram
    NSRect aRect =
    aRect = NSMakeRect (fieldWith, fieldHeight, fieldWith, balkenHoehe);

        // draw rectangle
    [[NSColor whiteColor] set];
    [NSBezierPath fillRect:aRect];

        // draw rect border
    [[NSColor blackColor] set];
    NSBezierPath *aPath = [NSBezierPath bezierPathWithRect:aRect];
    [aPath setLineWidth:1];
    [aPath stroke];

}

@end

2 个答案:

答案 0 :(得分:1)

Horatiu是对的,你没有在窗口添加hoehe NSView,没有地方可以显示它。但是,我认为他提出的建议是iOS,而这似乎是OS / X.将视图添加到窗口的一种方法是编写

[self.window setContentView:hoehe];
pushButton:中的

。但是,这只能工作一次,然后擦掉按钮的视图!

更有用的方法是将hoehe视图添加到现有窗口的contentView

ViewController *hoehe = [[ViewController alloc] init];
[hoehe setFrame:CGRectMake(20, 20, 100, 100)]; // or whatever
[self.window.contentView addSubview:hoehe ];
[hoehe setBalkenHoehe:number];

但请注意,每次按下按钮,您都会创建一个新的NSView并将其植入之前的所有NSView中。

答案 1 :(得分:0)

我认为问题不在于您设置变量的方式。据我所知,你的视图控制器的视图没有添加到窗口的视图层次结构中,所以你的绘制矩形没有做任何事情或更好的说没有上下文来绘制东西。

将ViewControllers视图添加到窗口或视图层次结构中,事情应该开始了。类似的东西:

[window addSubview:_viewController.view];

这就是我能想到你的问题。