Objective C、Project Builder、および IB は初めてなので、知識不足をお許しください...
NSView クラスの使用法を学び、理解するための簡単なプログラムを作成しようとしています。NSView
これは、RED、GREEN、BLUE、および YELLOW というラベルの付いた 1 つのボタンと 4 つのボタンを備えた 1 つのウィンドウで構成されています。
目標は、ボタンを押して NSView を適切な色で塗りつぶすことです。コードのいくつかのバリエーションを試しましたが、結果に近づくものはないようです。現在、実行すると、ウィンドウは真っ黒な四角形 ( NSView
MyView と呼ばれる私のサブクラス/オブジェクト) と 4 つのボタンと共に表示されます。
MyView.h/.m ファイル内の MyView の初期色を正常に変更できますが、色を変更したり、コントローラー コード (AppController.h/.m と呼ばれる) から MyView を再描画したりできないようです。常にコンパイラの警告が表示されます。
インターフェイスは IB で作成され、Custom View オブジェクトは MyView サブクラスを指していました。以下にコードを添付しました。
//---------------------------
//
// MyView.h
//
#import Cocoa/Cocoa.h
@interface MyView : NSView
int myColorChoice;
@end
//--------------------------
//
// MyView.m
//
#import "MyView.h"
@implementation MyView
int myColorChoice = 4;
-(void) setMyColorChoice : (int) c {
myColorChoice = c;
}
-(void) drawRect: (NSRect) rect {
switch (myColorChoice) {
case 1 :
[[NSColor greenColor] set];
break;
case 2 :
[[NSColor blueColor] set];
break;
case 3 :
[[NSColor redColor] set];
break;
case 4 :
[[NSColor yellowColor] set];
break;
}
NSRectFill([self bounds]);
}
@end
//--------------------
//
// AppController.h
//
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject {
IBOutlet id display;
}
- (IBAction)makeBlue:(id)sender;
- (IBAction)makeGreen:(id)sender;
- (IBAction)makeRed:(id)sender;
- (IBAction)makeYellow:(id)sender;
@end
//---------------------
//
// AppController.m
//
#import "AppController.h"
#import "MyView.h"
@implementation AppController
- (IBAction)makeGreen:(id)sender {
[MyView setMyColorChoice:1];
[MyView setNeedsDisplay:YES];
}
- (IBAction)makeBlue:(id)sender {
[MyView setMyColorChoice:2];
}
- (IBAction)makeRed:(id)sender {
[MyView setMyColorChoice:3];
}
- (IBAction)makeYellow:(id)sender {
[MyView setMyColorChoice:4];
}
@end
私は単にいくつかの基本原則に違反していると確信していますが、これについて頭を悩ませているようには見えません。MyView が不適切に設定されていることと関係があると思われます。メソッドのいずれかを呼び出そうとすると、試行したメソッドのいずれかに対してコンパイラが「MyView が応答しない可能性があります...」と表示されるためです。電話する。
注: 実験のために makeGreen メソッドを変更しただけです。それが機能したら、他の色のコードを複製します。
どんな助けでも大歓迎です!
みんなありがとう。