新的應對目標C,項目Builder和IB所以請原諒我的知識的缺乏......的NSView未能在一個非常簡單的程序
我試圖創建一個簡單的程序來學習和了解使用NSView類。它由一個帶有單個窗口的單個窗口組成,並帶有四個按鈕,分別標記爲紅色,綠色,藍色和黃色。
目標是推動一個按鈕,並使NSView填充適當的顏色。我嘗試了代碼的幾個變體,但沒有一個看起來更接近結果。目前,在執行時,窗口將顯示一個純黑色正方形(我的NSView
子類/稱爲MyView的對象)和四個按鈕。
我可以在MyView.h/.m文件中成功更改MyView的初始顏色,但是,我似乎無法更改顏色或從我的控制器代碼重新繪製MyView(稱爲AppController.h/.m )。我總是收到編譯器警告。
接口在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被錯誤設置有關,就像我嘗試調用我的任何方法一樣,編譯器會給我提供「我的視圖可能不會響應...」的任何我嘗試的方法打電話。
注:我只是在修改makeGreen方法進行實驗。一旦工作,我會複製其他顏色的代碼。
任何幫助將不勝感激!
謝謝你們。
另外,您還沒有聲明實例變量myColorChoice,因此您聲明瞭文件範圍變量。然後,你已經在實現文件中重新聲明瞭它。在接口中,用大括號括住實例變量聲明@interface MyView {int myColorChoice; ... ...。不要(重新)在實現中聲明變量。如果您希望將實例變量初始化爲特定值,請在init方法中執行此操作。 (對於以編程方式創建的視圖,這是initWithFrame:對於從NIB加載的視圖,即-initWithCoder :.)或者,您可以在-awakeFromNib中執行此操作。 – 2012-04-06 05:20:11
你是對的。這就是我設置的顯示器。我只是做了這個改變,並突然發揮作用。(不出意外)。奇怪的是,我發誓我早些時候做過,但沒有奏效。我一定有這個代碼有多個問題,並設法修復一些,而「解開」其他人。 謝謝你的解釋。我已經修復了這些錯誤,現在所有工作都按照我預期的那樣工作,現在可以更好地瞭解我犯的錯誤。 – 2012-04-06 13:43:44