2011-08-02 10 views
0

私が見逃していますか?色は変わらない。setBackgroudColor to NSView

#import "controller.h" 
#import "backgroundView.h" 
@implementation controller 
-(void)awakeFromNib { 
    backgroundView *background = [[backgroundView alloc] init]; 
    [background setBackgroudColor:[NSColor whiteColor]]; 
    //also didn't work 
    //[background setBackgroudColor:[[NSColor whiteColor] retain]]; 
} 
@end 

//backgroundView.h 
#import <Cocoa/Cocoa.h> 

@interface backgroundView : NSView{ 
    NSColor *color; 
} 
-(void)setBackgroudColor:(NSColor*)newColor; 
@end 
#import "backgroundView.h" 
@implementation backgroundView 
-(void)dealloc{ 
    [super dealloc]; 
} 
-(void)setBackgroudColor:(NSColor*)newColor{ 
    color = newColor; 
    [self setNeedsDisplay:YES]; 
} 
-(void)drawRect:(NSRect)rect{ 
    [color setFill]; 
    NSRectFill(rect); 
} 
@end 

答えて

2
  1. あなたはsetBackgroundColor:方法でnewColorを保持しなければなりません。
  2. awakeFromNibメソッドでdealloc
  3. でリリースcolor IVARあなたはinitを使用してビューを初期化しますが、指定イニシャライザは、あなたがスーパーに新しく作成されたビューを追加何らコードはありませんinitWithFrame:
  4. です。
  5. また、あなたがどこに添付されていないawakeFromNibでビューを作成しているNSColor
+0

私はinitWithFrameをどのように使うべきですか? – user840250

+0

@ user840250: 'init'と同じ方法で使用しますが、ビューにフレームとして持つ矩形を渡します。詳細については、「View Programming Guide」を参照してください。http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002978およびNSViewクラス参照:http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/occ/cl/NSView –

0

ためsetの代わりsetFillを使用しようとすることができます。代わりに、Interface Builderでビューのカスタムクラスを変更し、このビューにコンセントを設定し、setBackgroudColor:を呼び出してください。

また、クラスは大文字で始まるので、backgroundViewBackgroundViewである必要があります。 Andriyが言ったように、あなたのcolor ivarのメモリ管理を修正してください。